Amazon Connect からの自動コールをSalesforce上で受ける。ついでにケースレコードも自動で作っちゃえ!

By |8月 20, 2018|Amazon Connect, AWS, AWS IoT Button, salesforce, Salesforce.com, |


こんにちは。ウフル営業部の彦部です。
コードガリガリやっていますが、実は営業部に属しています。
今日は部の会議で塩の話をしていました。
塩ってどんな料理にも入れられるし、美味しくなるし、万能ですが、いちいち
「へーこれって『○○の塩』入ってるんだー。だから美味しいんだね」なんて言わないですよね。
この塩の話もそう遠くない未来にこのブログにつながっていく予定ですのでお楽しみに(*´σー`)エヘヘ

さて、本題です。

前回Amazon Connectのアウトバウンドを試し、大いに感動したことを記事にしましたが、今回はこの続きです。
※前回の記事はこちら↓
簡単にコールセンター!IoT Buttonをポチるとamazon connectから自動アウトバウンドコールがやってくる!

今日のテーマは

Salesforceでコールセンター(自動コールからの受電)

まずはイメージフローをご覧ください。
フロー(SFいり)

前回の記事のフローと比べると、service cloudとの連携の部分が追加になっているのがわかるでしょう。

*****************************
準備するもの:
・Automated Outbound Callingの仕組み(前回の記事のやつ)
・Salesforceアカウント
・AWSのアカウント
・受電用端末1台・架電用端末1台
・AWS IoT Button

手順:
1.Amazon ConnectをSalesforce Service Cloud上で使用できるよう設定
2.接続アプリケーションの設定をする。
3.Lambda関数を書く。
4.実践!

 

1.Amazon ConnectをSalesforce Service Cloud上で使用できるよう設定

これはアウトバウンドもインバウンドも手順が一緒。
例によってインバウンドをするためのSalesforce連携に関する手順は色々ネットにおちてます。例えばこことか↓
Amazon ConnectをSalesforce Service Cloud上で使用してみる
やってみてくださいね。おわり。

2.接続アプリケーションの設定をする。

今回はSalesforce REST APIを使用することとしていますが、Salesforceへのアクセスにおける認証方法として、OAuth2を利用します。
Salesforceに外部から接続するには、「接続アプリケーション」を登録してあげる必要があります。

Salesforceの設定画面(右上の歯車から選択)のクイック検索ボックスに「アプリケーションマネージャ」と入力→出てきた項目をクリック。
アプリケーションマネージャ

右上の「新規接続アプリケーション」を選択。

新規接続アプリケーション

入力内容例↓

接続アプリケーション

保存する。ちなみに、「2~10分かかるよ」ってメッセージが出るので待ちましょう。

確認画面
接続アプリケーション確認画面

3.Lambda関数を書く。

参考とさせていただいたのはこちらのサイト↓
Node.jsからSalesforce REST APIを実行する (カスタムオブジェクトへレコードを追加する)

Node.jsない人はインストール
Node.js / npmをインストールする

んで、コード


require('date-utils');
var jsforce = require('jsforce');
var AWS = require('aws-sdk');

// Salesforce REST APIエンドポイント
//// 本番環境へ接続する場合のAPIエンドポイント
var oauth_login_url = 'https://login.salesforce.com';

// Salesforce REST APIで接続するアプリケーションの「コンシューマ鍵」を設定する
var oauth_client_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

// Salesforce REST API接続用のSalesforceユーザ名を設定する
var oauth_client_username = 'XXXXXXXX@XXXXXXXXXX';

// Salesforce REST APIで接続するアプリケーションの「コンシューマの秘密」を設定する
var oauth_client_secret = 'XXXXXXXXXXXXXXXX';

// Salesforce REST API接続用のSalesforceユーザのパスワードを設定する
var oauth_client_authenticate_password = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';


exports.handler = (event, context, callback) => {

 var sobject_name = 'Case';

 // Salesforce REST APIへ接続する時の「コンシューマ鍵」(OAuthコンシューマキー等)をセットする
 var conn = new jsforce.Connection({
 oauth2 : {
  loginUrl : oauth_login_url,
  clientId : oauth_client_id,
  clientSecret : oauth_client_secret
 } 

 // カスタムオブジェクトへ追加するデータをセット
 var insert_record = {
  Status : "new",
  OwnerId : '00000000000000000000',
  Subject : '部品Cの故障',
  Type : "Mechanical",
  ContactId : "AAAAAAAAAAAAAAAAAA",
  AccountId : "BBBBBBBBBBBBBBBBBB",
  Reason : "Performance"
 };
 console.log("Salesforce REST API Insert Record");
 console.log(insert_record);
 
 // Salesforce REST APIへ接続する
 conn.login( oauth_client_username, oauth_client_authenticate_password, function(err, res) {
   if (err) { return console.error(err); }
 
   // SalesForce REST APIを実行してオブジェクトへレコードを追加する
   conn.sobject( sobject_name ).create( insert_record, function(err, res) {
     if (err) { return console.error(err); }
     console.log(res);
   });
 });
 // create amazon connect object
 var connect;
 connect = new AWS.Connect({apiVersion: '2017-08-08', region:"ap-southeast-2"});

 // create API request parameter
 var params = {
   ContactFlowId: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
   // 掛ける先の電話番号
   DestinationPhoneNumber: process.env.PHONENUMBER,
   // amazon connectのコールセンターのインスタンスID
   InstanceId: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
   // かける元の電話番号
   SourcePhoneNumber: "+8150XXXXXXXX"
 };

 // call API with parameter
 var calling = connect.startOutboundVoiceContact(params, function(err, data) {
   if (err) {
     console.log("error: ");
     console.log(err);
   } else {
     console.log("success: ");
     console.log(data);
   }
 });
 return calling;
}

Salesforceユーザのパスワードは「パス+トークン」になるのでお気を付けください。
コードの後半部分(57行目以降かな)は前回記事より変わっていません。
Salesforceのケースオブジェクトに機械故障のケースをinsertする処理を追加しています。
というわけで、index.jsとnode_modulesフォルダ(中にはdata-utils、jsforce入ってる)を圧縮してあっぷろーど!(蛇足ですが、最初これらの入っているフォルダごと圧縮してこけるというベタなミスを冒しました。あくまでフォルダの中身群を圧縮してくださいね)
あ、あと、前回同様、受電する用の電話番号を環境変数でセットする感じになってるのでこのままコード使うならちゃんと設定してあげてくださいね。

 

4.実践!

さあ、いざ!先ほどのLambda関数の名前をAWS IoT 1-Clickで呼び出せるように設定し、ボタンをポチ!

( *´艸`)

————————-

いかがでしたでしょうか?
ちゃんとMizukiちゃんとやりとりできましたか?

なお、今回はLambda内で電話する先を指定してしまいましたが、実案件で使う際には、
①IoT ButtonのDSNコードをAWS IoT 1-Clickの方から引数としてLambdaに渡す。
②Lambda内で、DSNコードをキーにSalesforce Service Cloudの取引先責任者(もしくは取引先とか)に検索かけにいく。
③電話番号を取得し、そこに架電するようにする。

といった感じにした方が良いですよね( ..)φメモメモ

以上、あっという間にコールセンター!
是非やってみてくださいね♪

hiko

About hiko

ソリューション営業部のシニアエンジニア。 IoTは人を豊かにする手段。 仕事は基本カフェでしたい人。 腰が痛くならない良質な椅子に巡り逢いたい。