" />

スポンサーリンク

chatwork ツール

chatworkのbotをPHPで書いてcoreserverで動かす

更新日:

最近私の中で、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 URLcoreserverにアップした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を作れるようになります。

スポンサーリンク

-chatwork, ツール

Copyright© ノリックジオグラフィック for Webエンジニア , 2022 All Rights Reserved Powered by AFFINGER5.