Bitrix24用のチャットボットの開発

Facebook Messenger用のチャットボットの開発に関する以前の記事では、このトピックがHabrの住民にとって興味深いものであることが示されたので、続けます。

今日は、Bitrix24メッセンジャー用のボットを開発します。 開発言語は同じです-PHP。



一般的な情報



チャットボットBitrkis24のプラットフォームは、今年3月末に登場しました。

ボットを書いている時点では、GitHubにはPHPライブラリがなかったので、私は自分で書いた-github.com/pimax/bitrix24-bot-php



コードを書く



最も簡単なオプションは、リポジトリgithub.com/pimax/bitrix24-bot-php-exampleを複製することです



git clone https://github.com/pimax/bitrix24-bot-php-example.git . composer install cp config_example.php config.php
      
      





編集のためにconfig.phpを開き、ボットに関する情報を入力します。

ここでは詳しく説明しません。記事を膨らまさないように、各パラメーターにはコメントが付いています。



デモボットの主要部分について詳しく説明します。

合計で、Bitrix24は4種類のイベントをwebhookに転送します。



ONAPPINSTALL-ポータルへのボットのインストール



 $bot->install(new Bot( $config['alias'], $config['type'], $config['url_message_add'], $config['url_welcome_message'], $config['url_bot_delete'], $config['data'] ));
      
      





ここではすべてが基本です-アプリケーションの設定からデータを取得し、ボットをポータルに登録します。

このコードが変更されることはほとんどありません。



ONIMBOTDELETE-ボットの削除



 $bot->uninstall();
      
      





ポータルからボットを削除します。

前のものと同様に、変更されることはほとんどありません。



ONIMBOTJOINCHAT-ボットをチャットに招待



 $bot->send(new Message("Hello", $_REQUEST['data']['PARAMS']['DIALOG_ID'], [ new Message('[send=/command1]Command 1[/send]'), new Message('[send=/command2]Command 2[/send]'), new Message('[send=/command3]Command 3[/send]'), ]));
      
      





ここでオプションはすでに可能です。 良いトーンは、最初のメッセージでボットがユーザーにコマンドを伝える動作です。 ユーザーが手動でコマンドを入力できないようにするために、Bitrix24は、ボットがリンクをクリックしたときにメッセージをボットに送信する[送信]コードを提供しました。



これはどのように見えるかです:







ONIMBOTMESSAGEADD-ユーザーからメッセージを受信する



私たちの主なタイプ。

その中で、ユーザーがボットに望むものを理解し、応答を準備し、ユーザーに応答を送信する必要があります。



 switch ($_REQUEST['data']['PARAMS']['MESSAGE']) { case '/command1': $bot->send(new Message("Command 1 response", $_REQUEST['data']['PARAMS']['DIALOG_ID'])); break; case '/command2': $bot->send(new Message("Command 2 response", $_REQUEST['data']['PARAMS']['DIALOG_ID'])); break; case '/command3': $bot->send(new Message("Command 3 response", $_REQUEST['data']['PARAMS']['DIALOG_ID'])); break; default: $bot->send(new Message("Hello", $_REQUEST['data']['PARAMS']['DIALOG_ID'], [ new Message('[send=/command1]Command 1[/send]'), new Message('[send=/command2]Command 2[/send]'), new Message('[send=/command3]Command 3[/send]'), ])); }
      
      





このコードは3つのコマンドを処理し、ユーザーが何か他のコマンドを送信すると、使用可能なコマンドのリストを再度表示します。



アプリケーションの配置



[アプリケーション]セクションに移動し、ポータルアプリケーションを追加します。



アプリケーションの名前を示し、「アプリケーションはAPIのみを使用する」ボックスをチェックします。

アクセス権では、「チャットボットの作成と管理」に注意してください。

[リンクの指定]フィールドで、インストールイベントのコールバックリンクを指定し、ボットへのリンクを指定します。例: example.com/apps/bitrix24

保存ボタンをクリックします。



Job4Joyフリーランス交換ボットの実際の例



実験の純度を高めるために、Facebook Messengerに関する記事と同じタスクを取り、Job4Joyフリーランス交換用のチャットボットを開発します。



そのため、私たちの目標は、適切なカテゴリで新しいプロジェクトを発行するボットを実装することです。

picoFeedを使用してRSS経由でデータを受信します-github.com/fguillot/picoFeed

リンクを短縮するためのgithub.com/SebastianM/GooglShortener



実施します



 git clone https://github.com/pimax/bitrix24-bot-php-example.git . composer install cp config_example.php config.php
      
      





次に、config.phpを編集して、フィードのリストとgoo.glのトークンを追加します。



 'google_token' => '', 'feeds' => [ '/all' => [ 'Title' => 'All jobs', 'Feed' => 'https://job4joy.com/marketplace/rss/' ], '/webdev' => [ 'Title' => 'Web Development', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=3' ], '/software' => [ 'Title' => 'Software Development & IT', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=5' ], '/design' => [ 'Title' => 'Design & Multimedia', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=2' ], '/mobile' => [ 'Title' => 'Mobile Application', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=7' ], '/server' => [ 'Title' => 'Host & Server Management', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=6' ], '/writing' => [ 'Title' => 'Writing', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=8' ], '/customer' => [ 'Title' => 'Customer Service', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=10' ], '/marketing' => [ 'Title' => 'Marketing', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=11' ], '/business' => [ 'Title' => 'Business Services', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=12' ], '/translations' => [ 'Title' => 'Translation & Languages', 'Feed' => 'https://job4joy.com/marketplace/rss/?id=14' ] ]
      
      





次の内容のmessages / ru.phpファイルを作成します。



 <?php return [ 'Hello! I can help you with IT projects.' => '!       .', 'find work & hire freelancers' => '   ', 'All jobs' => ' ', 'Web Development' => '-', 'Software Development & IT' => ' ', 'Design & Multimedia' => '  ', 'Mobile Application' => ' ', 'Host & Server Management' => '  ', 'Writing' => '', 'Customer Service' => ' ', 'Marketing' => '', 'Business Services' => ' ', 'Translation & Languages' => '', 'New projects not a found!' => '   !' ];
      
      





ボットの基本言語は英語ですが、ロシア語もサポートします。



index.phpで、GoogleShortenerライブラリ接続を追加します。



 require_once (dirname(__FILE__) .'/GooglShortener.php'); $googl = new GooglShortener($config['google_token']);
      
      





ロギング機能をすぐに書きましょう:



 /** * Log * * @param mixed $data Data * @param string $title Title * @return bool */ function writeToLog($data, $title = '') { $log = "\n------------------------\n"; $log .= date("Ymd G:i:s") . "\n"; $log .= (strlen($title) > 0 ? $title : 'DEBUG') . "\n"; $log .= print_r($data, 1); $log .= "\n------------------------\n"; file_put_contents(__DIR__ . '/imbot.log', $log, FILE_APPEND); return true; }
      
      





次に、ボットのウェルカムメッセージ関数を作成します。



 /** * Send Help Message * * @param $bot Bot instance * @return bool */ function sendHelpMessage($bot) { global $config; $attach = []; foreach ($config['feeds'] as $com => $feed) { $attach[] = new Message('[send='.$com.']'.$bot->t($feed['Title']).'[/send]'); } $bot->send(new Message($bot->t('Hello! I can help you with IT projects.'), $_REQUEST['data']['PARAMS']['DIALOG_ID'], $attach)); return true; }
      
      





次に、特定のフィードのプロジェクトのリストを取得し、ユーザーにメッセージを送信する関数を作成します。



 /** * Get Feed Data * * @param $feed Feed data * @param $bot Bot instance * @return bool */ function getFeed($feed, $bot) { global $googl; try { $reader = new Reader; $resource = $reader->download($feed['Feed']); $parser = $reader->getParser( $resource->getUrl(), $resource->getContent(), $resource->getEncoding() ); $feed = $parser->execute(); $items = array_reverse($feed->getItems()); if (count($items)) { foreach ($items as $itm) { $url = $googl->shorten($itm->getUrl()); $message = substr(strip_tags($itm->getContent()), 0, 150); $bot->send(new Message("[B]".$itm->getTitle() . "[/B]\n" . $message . "\n", $_REQUEST['data']['PARAMS']['DIALOG_ID']), [ new Link($url->id, $url->id) ]); } } else { $bot->send(new Message($bot->t('New projects not a found!'), $_REQUEST['data']['PARAMS']['DIALOG_ID'])); } } catch (Exception $e) { writeToLog($e->getMessage(), 'Exception'); } return true; }
      
      





以上です。 GitHubに投稿された完全なコード-github.com/pimax/job4joy_bitrix24bot



すべてのカタログでの公開



これで、アプリケーションはポータルのユーザーのみが使用できます。

すべてのユーザーにカタログでアプリケーションを公開するには、1C-Bitrixパートナーになる必要があります。

このプロセスの詳細情報はこちら-www.bitrix24.ru/apps/dev.php



おわりに



一般的に、このプラットフォームは若いにもかかわらず、非常に楽しい印象を与えます。

開発者にとって最大のマイナス面は、かなり長いモデレーション時間です。 法案は誇張せずに数週間行くことができます。 おそらくこれは、モデレーターの大きな負荷によるものであり、モデレーターには時間がありません。 今日、この問題は多くのインスタントメッセンジャーによく見られます。



便利なリンク



  1. チャットボットのプラットフォームに関する1C-Bitrix Webサイトの記事-dev.1c-bitrix.ru/community/blogs/marketplace_apps24/we-present-a-platform-for-chatbots-for-bitrix24.php
  2. Bitrix24ボットPHP SDK-github.com/pimax/bitrix24-bot-php
  3. Bitrix24ボットPHP SDKの例-github.com/pimax/bitrix24-bot-php-example
  4. Job4JoyボットPHPソース-github.com/pimax/job4joy_bitrix24bot



All Articles