問い合わせ内容をRedmineでチケット作成しSlackに通知する方法【A-Form Advent Calendar 2019/12/11】
2019年12月11日
問い合わせ内容をRedmineでチケット作成しSlackに通知する方法【A-Form Advent Calendar 2019/12/11】
この記事は 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の公式ドキュメント: メールによるチケット登録
redmineでAPIを利用してチケットを投稿する部分は rdm-mailhandler.rb というRubyプログラムが用意されています。これをメールサーバーにてメール受信時に実行させる、と書いてあります。弊社サーバーでもそのようにしています。
それだとredmine公式ドキュメントのママなので、ちょっと捻ってredmineが動いているサーバー以外は有効なRuby環境がない、という想定で node.jsでやります!
バージョン:
* node.js v8.16.2
* npm 6.4.1
npmでPackageのインストール
node.js でredmine APIを叩くnpmがあるのでインストールします。
node-redmine
Gmailのメールボックスで新着メールを監視してくれるように inbox をインストールします。
メール本文を取得できるように mailparser をインストールします。
npm init -y npm install -S node-redmine npm install inbox npm install mailparser
redmieの設定
redmineへログイン後、「個人設定」→「APIアクセスキー」の下の「表示」を押すと表示される redmine-APIキー をメモしておきます。
※redmineのバージョンが低い場合は出ません。その場合はまずredmineのバージョンアップをしてください。
クリックで拡大
GMailの設定
GMailL側の設定
「メール転送とPOP/IMAP」から「IMAPアクセス」が無効になっている場合は有効にします。
クリックで拡大
nodeのメインプログラムを作る
コードは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に通知を投げる
コードは先程のメインプログラムに書いてあります。
↓これだけ。
// ついでに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 については次を参照ください。
slackの Webhook設定
「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があれば他のシステムへの登録も可能かと思います。
お問い合わせ情報の共有や、ステータス管理などに外部サービスをお役立てください。
カテゴリー: A-Form, A-Member, A-Reserve(MTプラグイン)
タグ: A-Form , api , Movable Type 7 , redmine , slack
« 前の記事:A-FormでIPアドレス/ユーザーエージェントが取得できるようになります【A-Form Advent Calendar 2019/12/09】
» 次の記事:A-Formのラジオボタン/チェックボックス/ドロップダウンの編集がちょっと便利に【A-Form Advent Calendar 2019/12/12】
アークウェブの本
Zen Cartによるオンラインショップ構築・運用テクニック―オープンソース徹底活用
内容充実のZen Cart公式本(v1.3対応)がついに発表です。アークウェブのスタッフをはじめZen-Cart.JPの中心メンバーが共著で執筆しました。続きを読む
新着はてブ
カテゴリー
- Shopify(ショピファイ)オンラインショップ構築
- NGO・NPO向け情報
- スマートフォン
- だれもが使えるウェブコンクール
- mixiアプリ
- OpenSocial (システム開発)
- アークウェブのCSR
- A-Form, A-Member, A-Reserve(MTプラグイン)
- Ruby on Rails(システム開発)
- necoったー
- Miqqle
- WebSig24/7
- ecoったー
- ビッグイシュー(The Big Issue)
- CSR(企業の社会的責任)
- マッシュアップ
- RIA (システム開発)
- セキュリティ(システム開発)
- 唐松(アクセス解析)
- Ajax (システム開発)
- テスト(システム開発)
- データベース
- PukiWiki
- Web 2.0
- SEO・サーチエンジン最適化
- XP・アジャイル(システム開発)
- Web・ITニュースクリップ
- Webアクセシビリティ
- Webデザイン
- SEM・サーチエンジン広告
- Webユーザビリティ
- CMS・MovableType
- Zen Cart(オンラインショップ構築)
- Snippy(SNS・ソーシャルブックマーク)
- アークウェブ
- オープンソース
- CMS(コンテンツマネジメント・システム)
- Webマーケティング
- AMP
- SNS













