この記事は A-Form Advent Calendar 2019 参加記事です。
A-Formで作成したフォームでお問い合わせが来たら、その後の処理フローはA-Formを導入した方に委ねられているので、それぞれのルールで処理されていると思います。
例えば、
1.デフォルトのA-Formであれば、受付データに「管理ステータス」があるので問い合わせについて何らかの対応をしたら「管理ステータス」を変えることで状態管理ができます。
2.弊社で販売している A-Form To Salesforce というプラグインを利用すると、Salesforceの「リード(またはケース)」にお問い合わせデータを渡せるので、以降はSalesforce上で処理が可能です。
SalesforceなどのクラウドCRMサービスは使っていないが、デフォルトの管理ステータスだけではお問い合わせの内容が追いづらい という問題に当たることもあるかと思います。
弊社の場合は、 お問い合わせをredmineで新規チケットとして投稿 しています。ついでに、 Slackにお問い合わせがあったことを通知 するとよさそうです。
1.お問い合わせが来たら、A-Formに登録しておいたGmailのメールアドレスにメールが届く。
2.Gmailのメールボックス(IMAP)をチェックして、メールの内容をredmineに投稿する。
3.slackにredmineのチケット番号付きURLを流す。
クリックで拡大
これはA-Form自体のテクニックではないですが、お問い合わせいただいた内容を複数の人員で担当する場合にはとても役立ちます。弊社でもお問い合わせはredmineへ自動的にチケット投稿するようになっており、技術的な質問については担当者にチケットを確認させ、対応する仕組みになっています。
redmineの公式ドキュメント: メールによるチケット登録
redmineでAPIを利用してチケットを投稿する部分は rdm-mailhandler.rb というRubyプログラムが用意されています。これをメールサーバーにてメール受信時に実行させる、と書いてあります。弊社サーバーでもそのようにしています。
それだとredmine公式ドキュメントのママなので、ちょっと捻ってredmineが動いているサーバー以外は有効なRuby環境がない、という想定で node.jsでやります!
バージョン:
* node.js v8.16.2
* npm 6.4.1
node.js でredmine APIを叩くnpmがあるのでインストールします。
node-redmine
Gmailのメールボックスで新着メールを監視してくれるように inbox をインストールします。
メール本文を取得できるように mailparser をインストールします。
npm init -y npm install -S node-redmine npm install inbox npm install mailparser
redmineへログイン後、「個人設定」→「APIアクセスキー」の下の「表示」を押すと表示される redmine-APIキー をメモしておきます。
※redmineのバージョンが低い場合は出ません。その場合はまずredmineのバージョンアップをしてください。
クリックで拡大
GMailL側の設定
「メール転送とPOP/IMAP」から「IMAPアクセス」が無効になっている場合は有効にします。
クリックで拡大
コードはGit参照。
https://github.com/ARK-Web/node_inbox2redmine
rdm-mailhandler.rb のようにメールをパースして、必要なプロジェクトに担当を指定して投稿するような高級な機能はなく、 極シンプルな実装 ですが今回必要なredmineに投稿するのは事足ります。
node-redmineのcreate_issue()メソッドで引数issueのパラメータを入れます。プロジェクトIDやトラッカーID、担当者IDが数字で入ってますが、この辺はredmine側を調べてください。
redmine.create_issue({
'issue': {
'project_id' : 379, // プロジェクト ID 「projects.xml?limit=100」へアクセス
'tracker_id' : 6, // トラッカー ID
'subject' : escapeHtml(mail.subject), // チケット名
'description' : escapeHtml(mail.text), // 説明 : 改行は「\r\n\」で書ける
'assigned_to_id': 4, // 担当者 ID
'start_date' : '2019-12-01', // 開始日 : 文字列 'YYYY-MM-DD'
}
実行すると「connected」と出力されるので、これでGmailのメールボックス監視ができたことになります。あとは、Gmailにメールをすればredmineに投稿されます。
実行: node inbox2redmine.js
コードは先程のメインプログラムに書いてあります。
↓これだけ。
// ついでにSlackになげる
var id = ticket.issue.id;
var link = 'https://<redmineのURL>/issues/'+ id;
var slack_msg = "お問い合わせがありました。「"+ ticket.issue.subject +"」のチケット参照 <"+ link +">";
slack.write(slack_msg);
slack.write()については lib/slack.js の方に細かい実装は書きました。
Webhook URL については次を参照ください。
「Incoming WebHooks」を使います。
* Slack Add App より incoming-webhooks を検索します。
* 【Add to Slack】を押す
* 「Post to Channel」から投稿するチャンネルを指定して【Add Incoming WebHooks integration】を押す
* 「Webhook URL」 をメモしておく
* lib/slack.jsの hooks に登録 する
実行方法はredmine投稿の時と同じです。gmailにメールすると、redmineに書き出されてチケット番号をSlackで通知します。
実行: node inbox2redmine.js
今回は、A-Formの管理者宛てメールからRedmineへのつなぎ込みについて実装しました。登録用のAPIがあれば他のシステムへの登録も可能かと思います。
お問い合わせ情報の共有や、ステータス管理などに外部サービスをお役立てください。