Edited at
SmalltalkDay 18

Pharo Smalltalkでチャットワーク(ChatWork)にメッセージを投稿したりする

More than 1 year has passed since last update.

Pharoからチャットワーク(ChatWork)にメッセージを投稿したりする例です。

そこそこ簡単にやれます。


Pharoの準備

この辺から環境に応じてPharoを入手、インストールしてください。

http://pharo.org/download


チャットワーク(ChatWork)のAPIトークンの取得の入手

認証方法 - APIトークンの取得を参考に、APIトークンを入手します。

http://developer.chatwork.com/ja/authenticate.html

リクエストしてから、1営業日ほど待つと利用できるようになります。


ChatWork4S

ChatWork4Sは拙作のChatWork APIクライアントライブラリです。

http://smalltalkhub.com/#!/~kaminami/ChatWork4S

ChatWorkが提供するAPI利用できるAPIのすべてはカバーできてはいませんが、メッセージの投稿、取得あたりはやれます。

http://developer.chatwork.com/ja/endpoints.html

CWClientのクラス側にサンプルコードが準備されているので、まずはそちらを参照するのが良いでしょう。


PharoへのChatWork4Sの導入

以下のスクリプトをPharoのWorkspace等でdoItして必要なライブラリを導入します。

"ChatWork4Sの導入"

Gofer new
url: 'http://mc.stfx.eu/Neo';
package: 'Neo-JSON-Core';
load.

Gofer new smalltalkhubUser: 'kaminami'
project: 'ChatWork4S';
package: 'ChatWork4S';
load.


メッセージ投稿

とりあえずメッセージ投稿の例です。

"既存のグループチャットにメッセージを投稿"

| token roomId client |
token := 'YOUR_TOKEN'.

"グループチャットのURL https://www.chatwork.com/#!rid12345678の 12345678 部分"
roomId := 'YOUR_ROOM_ID'.

client := CWClient token: token.
client sendMessage: DateAndTime now asString to: roomId.

現状、ChatWork APIには、Slackと違い、投稿時にアカウント名やアイコンを設定する機能は搭載されていないようです。

Bot用には専用アカウントを作成しないと、自分の投稿とBotの通知が区別できなくなってしまうのが、やや面倒なところです。


メッセージ取得

グループチャットに投稿された最近100件分のメッセージを取得します。

"最近100件分のメッセージを取得"

| token roomId client |
token := 'YOUR_TOKEN'.

"グループチャットのURL https://www.chatwork.com/#!rid12345678の 12345678 部分"
roomId := 'YOUR_ROOM_ID'.

client := CWClient token: token.
client allMessagesAt: roomId.
client recentMessagesAt: roomId. "前回取得分からの差分のみ取得した場合はこちら"

プッシュで更新分を取得できるAPIは準備されていないので、投稿されたメッセージに反応するBotを作成する場合は、Pollingで対応します。

「APIのリクエスト数は、5分あたり100回まで」の制限があるので、ご利用は計画的に。


おわりに

Pharo SmalltalkからのChatWork API利用例でした。