最近私の中で、botが熱いです。
面白いなと思っています。
この記事では掲題の通り、PHPで書いたchatwork-botをcoreserverに置いてみます。
通知を受け取るchatwork-bot
通知を受け取ってログに吐いてみます。
1.PHPでbotを書く
好きなエディタやメモ帳などでPHPのコードを書きます。
<?php
$raw = file_get_contents('php://input');
$receive = json_decode($raw, true);
error_log(print_r($receive,true),"3","./echo.php.log");
?>
1 ~2行目は投稿内容を取得するお決まりの方法だと思ってください。
1 行目の要領でchatworkからメッセージ内容を受け取り、
2行目でJSON化しています。
3行目でPHPの組み込み関数であるerror_logを使って、ログを出力します。
第3引数では任意のログファイル名を指定します。
2.coreserverに配置
作ったPHPファイルをcoreserverにアップします。
FTPなど好きな方法でアップしてください。
Web上からアップするには、旧コンパネのファイルマネージャを使うことができます。
アップできればOKです。
chatworkのbotはHTTPSでリクエストを受け付ける必要があります。
そのため、coreserver上では独自ドメインかつSSLを有効にした状態である必要があります。
3.chatworkにbotを登録する
右上の自分の名前をクリックして出てくるメニュー>サービス連携 を押します。
右サイドバーのAPI>Webhookを押して、新規登録します。
Webhook名 | botの名前を好きに決めます。 |
Webhook URL | coreserverにアップしたbotのURLを入力します。 |
イベント | ・アカウントイベント/ルームイベント 今回は、サンプルbotなので、自分のマイチャットに投稿されたら、botが起動するというものにします。 マイチャット=ルームなので、ルームイベントを選択します。 ・ルームID マイチャットのルームIDを入力します。 |
4.動作確認
Webhookの編集で指定したルームIDのルームで、自分でメッセージを送信します。
PHPで指定したログが作成されているはずなので、確認してみましょう。
Array
(
[webhook_setting_id] => xxxx
[webhook_event_type] => message_created
[webhook_event_time] => 1639186879
[webhook_event] => Array
(
[message_id] => 1521329757143212032
[room_id] => xxxx
[account_id] => xxxx
[body] => ログに吐くテキストです!
[send_time] => 1639186879
[update_time] => 0
)
)
このように、投稿内容がログに出力されています。
これで通知を受け取ることができました。
これを応用すれば、投稿内容に応じてbotに好きな仕事をさせることができますね。
通知を受け取って返信するchatwork-bot
1.PHPでbotを書く
PHPはこのようになります。
メッセージ内容に「なんでやねん」が含まれていたら、
「どないやねん!」と返答するbotです。
<?php
$raw = file_get_contents('php://input');
$receive = json_decode($raw, true);
$message = $receive['webhook_event']['body'];
$pattern = '/なんでやねん/';
if (!preg_match($pattern, $message)) {
return;
}
$reply = array('body' => "[bot]どないやねん!" );
header('Content-type: application/json; charset=utf-8');
$cdata = curl_init();
curl_setopt($cdata, CURLOPT_URL, 'https://api.chatwork.com/v2/rooms/yyyy/messages');
curl_setopt($cdata, CURLOPT_HTTPHEADER, array('X-ChatWorkToken: xxxx'));
curl_setopt($cdata, CURLOPT_POSTFIELDS, http_build_query($reply, '', '&'));
curl_setopt($cdata, CURLOPT_POST, 1);
curl_setopt($cdata, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_exec($cdata);
curl_close($data);
?>
2~3行目はお決まりのメッセージを取得する方法です。
4行目でメッセージの投稿内容部分だけを取り出します。
6~9行目で投稿内容に「なんでやねん」という文字が含まれているか判定し、含まれていなければ処理終了します。
それ以降はchatworkにbotからメッセージを投稿しています。
PHP組み込みのcurl_exec関数を使っています。
botからメッセージを投稿するために、15~20行目でHTTPリクエスト内容を作成します。
CURLOPT_URL:Chatwork API において、ルームにメッセージを投稿するときのURLです。
CURLOPT_HTTPHEADER:API Token画面から発行したトークンをセットします。
書いたPHPをcoreserverにアップして、chatworkの画面からwebhookに登録してください。
2.動作確認
早速投稿してみましょう。
最初の「おはようございます」には何も反応はありません。
次の「今日の寒さなんでやねん」には「なんでやねん」が含まれています。
そのため、[bot]から返答が来てますね。
botからルームにメッセージを送信することができました。
これを応用すれば、対話型のbotを作ることができますね。
サンプルは以上です。
しょうもないサンプルでしたが、bot側はただのPHPなので、DBと連携したり、外部APIと連携することで、高度なbotを作れるようになります。