WorkToolSmith仕事や生活に役立ついろいろな商品をおもしろおかしく体験レビュー!書類管理からサーバー、プログラム、ゲームの話題、子育てグッズなんかも。2019.02.15どうも太田アベル(@LandscapeSketch)です。今日はDelphiでSlackに自動投稿するボットのベースを作ります。情報が少なかったので備忘録を兼ねて。Slackでアプリの登録し、トークンを得ます。(方法は他サイトに譲るw)フォームにTRESTClientTRESTRequestTRESTResponseTMemoボタン2つを設置。エンドポイントを登録TRESTClientにエンドポイントを登録します。プロパティのBaseURLに「https://slack.com/api」を入力。Paramsに新しい新規Itemを作り、nameに”token”、Valueに先ほど得たアプリのトークン文字列を入れます。KindはpkGETorPOSTのままでOK。共通で使うキーなどはTRESTClientに保持させると便利。Responseの用意TRESTRequestの問い合わせに対して、値の取得などはTRESTResponseが行います。TRESTRequestのResponseプロパティに、RESTResponse1を選択。これだけでOK!Requestの返値はResponseが自動で保持します。リクエストしてみるまずはテスト。slackは「auth.test」クエリで正常テストを行えます。RESTRequestのプロパティに書いていってもいいですが、コードから書けば柔軟になります。RESTResponse1.Content;たったこれだけで取得から受信までできます!さっそくコンパイルしてぽちっとな。なんだかボカシだらけになってしまいましたが、JSONが返ってきていて、先頭の”ok”にtrueが入っていれば、通信は正常です!メッセージを送る!通信が正常なので、メッセージを送ってみます。“as_user”にfalseが必要です。as_userはユーザーとして投稿するフラグ(で認識あってる?)なので、これが立っていると単なるボットとしての投稿ができません。falseが返ってきます。(slackはまだ勉強中なので認識がおかしい場合はコメントください。)パラメータはParams.AddItemで書いていきます。Button2のイベントハンドラに下記コードを投入。RESTResponse1.Content;end;end;さてここで1点ハマりポイント。ParamのValueに日本語文字列をそのままいれても文字化けします。UTF8Encodeしてもダメ、UrlEncodeでもダメです。[TRESTRequestParameterOption.poDoNotEncode];この書き方。TNetEncoding.URL.Encodeは後ろの2つの引数を入れると挙動が変わります。「+」とか記号のエンコードがだいぶ違う。ここに明示的に空のオプションを渡せば、素直になります。罠が多い文字列を明示的に変換し、さらにオプションにpoDoNotEncodeに設定し、勝手に内部処理させないようにします。!グッドですね![matome]とりあえずこれで最低限のメッセージは送れます。この記事にあるように、売上連絡ぐらいなら20分もあればできるのではないでしょうか。コメントをキャンセルメールアドレスが公開されることはありません。アベル1976年生まれ。