ワードプレスの「お問い合わせ」内容を、LineWorksのトークルームで受信をして、複数人で共有するという方法です。
ワードプレスの「ContactForm7」+「phpプログラム」で実現しています。
LineWorks API 2.0 版です。
API1.0版は、

ワードプレス、ContactForm7の内容を、LineWorksに
現場では、「LineWorks」が使われている場合があります。わざわざメールをチェックしなくても、「LineWorks」に通知されると便利です。今回は、ContactForm7 + phpプログラムでやってみたいと思います。↑ API 2....
になります。
Line works のアカウントを作成します。


↑ line worksの画面、右上の「ログイン」を押します。


↑ 下の「管理者として新規開設」を押します


↑ 「管理者として新規開設を押して、いくつかの質問に答えてアカウントを登録します。
「Bot」を登録
https://developers.worksmobile.com/jp/
「LINE WORKS Developers」に入ります。


↑ LINE WORKS Developer Console に入りました。


↑ 左メニュー「Bot」を選びます。
「登録」のボタンを押します。


↑ 登録画面になります。
プロフィール画像は、linework上に表示されますので、わかりやすい画像にすると混乱が少ないです。
今回、ワードプレスのロゴを入れてみました。
「bot名」も、lineworks上に表示されますので、わかりやすい名称がいいかと思います。
「説明」は、ご自身の説明を入れます。
「複数人のトークルーム招待可」にチェックを入れます。
「主担当」は、ログインしている管理者を、設定するといいかと思います。


↑ 登録されました。
注意事項には、以下のような説明がなされています。
Botがテナントに登録されました。管理者画面からBotのドメイン登録を行い公開すると、メンバーのアドレス帳に表示されるようになります。
登録したBotは、管理者画面での追加およびメンバーへの公開前に十分にテストを行ってください。
Botがテナントに登録されました。管理者画面からBotのドメイン登録を行い公開すると、メンバーのアドレス帳に表示されるようになります。
登録したBotは、管理者画面での追加およびメンバーへの公開前に十分にテストを行ってください。
Botがテナントに登録されました。管理者画面からBotのドメイン登録を行い公開すると、メンバーのアドレス帳に表示されるようになります。
登録したBotは、管理者画面での追加およびメンバーへの公開前に十分にテストを行ってください。


↑ 登録されました。
botのサービス登録
https://admin.worksmobile.com/
「LINE WORKS Admin」に入ります。


↑「サービス」の「bot」を選びます。


↑ 右上、「Bot追加」を選びます。


↑ さきほど、登録したbotが表示されています。


↑ チェックを入れて、画面右側の「追加」を押します。


↑ 追加されたとのメッセージが出ます。


↑ LINE WORKS Developer Console の「Bot」のメニュー、「サービス中」になりました。


↑ LINE WORKS Admin のほうの「Bot」で、追加した「wp-contact」のbotに、鍵がかかっており、非公開に
なっていますので、これを公開にしたいと思います。鍵の左の「wp-contac」の文字をクリックします。


↑ 右下、修正を押します。


↑ 下、「公開設定」を押して、公開にして、「保存」を押します。


↑ 鍵がなくなり、公開されました。


↑ LINE WORKS トーク の管理画面で、上記のようなサービス通知がなされました。
「API」を作成
https://developers.worksmobile.com/jp/
「LINE WORKS Developers」に入ります。


↑ 左メニュー、「API」を選び、「アプリの新規追加」を押します。
アプリ名を適当な名前で、登録します。


↑ 「OAuth Scopes」の「管理」を押します


↑ 「bot」と「bot.read」を選び、「保存」を押します。


↑ この画面に戻り、再び、「保存」を押します。


↑ 「Service Account」のところで、「発行」を押します。


↑ 「Private key」の「発行 / 再発行」を押します。


↑ 上記のような画面が出てきます。
private_(数字).keyをダウンロードします。
LineWorksのトークルームへの招待
トークルームに、wordpressの問い合わせ内容が通知されるために、希望のトークルームに「bot」を招待します。


↑ 招待したいトークルームを選び、右上のメニューから、「招待」を選びます


↑「Bot」のタブから、設定をした「wp-contact」を選び、右下の「OK」を押します。
「Bot」タブがない場合


↑ 上記のように、「Bot」のタブがない場合があります。
原因は、以下のいずれか(1~3)かと思います。
「外部トーク連携」をしているトークルームには、招待できない。
「外部トーク連携」とは、「LINEユーザ」を招待しているトークルームです。


↑「Bot」の右側、「外部」のタブから招待しているユーザがいたら、「Bot」は招待できません。
API 1.0 の時は、できたような気がするのですが、今は(API 2.0 は)、できないようです。
![]()

外部トーク連携しているトークルームにBotを招待できるのか
### 前提・実現したいこと 外部トーク連携しているトークルームにBotを招待したい ### 発生している問題・エラーメッセージ - 外部ユーザーを招待すると以下のメッセージが出てBotが共存できない ``` XXX BotさんはLINE連...
↑
多数人トークルームではBotを招待できるものの・・・
多数人トークルームではBotを招待できるものの・・・
外部ユーザーとのトークルームはできないかと。
多数人トークルームではBotを招待できるものの・・・
外部ユーザーとのトークルームはできないかと。
「複数人のトークルームに参加可」
「公開設定」を公開にする
上記は、2つとも、設定時により、変更ができます。


↑ トークルーム、右上のメニューから、一番下の「チャンネルID」を選びます。


↑ 英数字が、「-」でつながった、文字列です。
Guzzle Http インストール




ワードプレス、ContactForm7の内容を、LineWorksに
現場では、「LineWorks」が使われている場合があります。わざわざメールをチェックしなくても、「LineWorks」に通知されると便利です。今回は、ContactForm7 + phpプログラムでやってみたいと思います。↑ API 2....
↑ 上記を参考にしてください。
JWTライブラリの設置




ワードプレス、ContactForm7の内容を、LineWorksに
現場では、「LineWorks」が使われている場合があります。わざわざメールをチェックしなくても、「LineWorks」に通知されると便利です。今回は、ContactForm7 + phpプログラムでやってみたいと思います。↑ API 2....
↑ 上記を参考にしてください。
プログラム
require_once 'jwt/src/BeforeValidException.php';
require_once 'jwt/src/ExpiredException.php';
require_once 'jwt/src/SignatureInvalidException.php';
require_once 'jwt/src/JWT.php';
require_once 'vendor/autoload.php';
$key = "(★1の内容を入れる(複数行、英数字、記号))";
$ClientID = "(★2の「Client ID」を入れる(英数字、記号))";
$ServiceAccount = "(★3の「Service Account」を入れる(英数字、記号))";
$header = '{"alg":"RS256","typ":"JWT"}';
$header = base64_encode($header);
$header = str_replace(array('+','/','='), array('-','_',''), $header);
$body = ['iss'=>"$ClientID",
'sub'=>"$ServiceAccount",
$body = json_encode($body);
$body = base64_encode($body);
$body = str_replace(array('+', '/', '='), array('-', '_', ''), $body);
$data = $header.".".$body;
openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256);
$signature = base64_encode($signature);
$signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature);
$jwt = $header . "." . $body . "." . $signature;
$submission = WPCF7_Submission::get_instance();
$fm7 = $submission->get_posted_data();
$mes = "氏名\n" . $fm7['your-name'] . "\n\n";
$mes .= "メールアドレス\n" . $fm7['your-email'] . "\n\n";
$mes .= "題名\n" . $fm7['your-subject'] . "\n\n";
$mes .= "メッセージ本文\n" . $fm7['your-message'] . "\n\n";
function getAccessToken($jwttoken){
$secret = "(★2の、「Client Secret」を入れる(英数字、記号))";
$url = "https://auth.worksmobile.com/oauth2/v2.0/token";
"grant_type" => urlencode("urn:ietf:params:oauth:grant-type:jwt-bearer"),
"assertion" => $jwttoken,
"client_id" => $ClientID,
"client_secret" => $secret,
'Content-Type' => 'application/x-www-form-urlencoded'
$response = $client->request("POST", $url, $options);
$status = (string) $response->getStatusCode();
$body = $response->getBody();
$json = json_decode($body, true);
return $json["access_token"];
$botno = '(★4の「Bot No.」の数字)';
$cahnnelID = "(★5の「チャンネルID」を入れます(英数字、記号))";
$message = get_form_mes();
$token_now = getAccessToken($jwt);
$url = "https://www.worksapis.com/v1.0/bots/$botno/channels/$cahnnelID/messages";
'Content-Type' => 'application/json',
'Authorization' => "Bearer $token_now"
$response = $client->request("POST", $url, $options);
<?php
require_once 'jwt/src/BeforeValidException.php';
require_once 'jwt/src/ExpiredException.php';
require_once 'jwt/src/SignatureInvalidException.php';
require_once 'jwt/src/JWT.php';
use \Firebase\JWT\JWT;
require_once 'vendor/autoload.php';
use GuzzleHttp\Client;
$key = "(★1の内容を入れる(複数行、英数字、記号))";
$ClientID = "(★2の「Client ID」を入れる(英数字、記号))";
function get_jwt(){
global $key,$ClientID;
$ServiceAccount = "(★3の「Service Account」を入れる(英数字、記号))";
$header = '{"alg":"RS256","typ":"JWT"}';
$header = base64_encode($header);
$header = str_replace(array('+','/','='), array('-','_',''), $header);
$body = ['iss'=>"$ClientID",
'sub'=>"$ServiceAccount",
'iat'=>time(),
'exp'=>time()+1800
];
$body = json_encode($body);
$body = base64_encode($body);
$body = str_replace(array('+', '/', '='), array('-', '_', ''), $body);
$data = $header.".".$body;
openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256);
$signature = base64_encode($signature);
$signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature);
$jwt = $header . "." . $body . "." . $signature;
return $jwt;
}
function get_form_mes(){
$submission = WPCF7_Submission::get_instance();
if($submission) {
$fm7 = $submission->get_posted_data();
$mes = "氏名\n" . $fm7['your-name'] . "\n\n";
$mes .= "メールアドレス\n" . $fm7['your-email'] . "\n\n";
$mes .= "題名\n" . $fm7['your-subject'] . "\n\n";
$mes .= "メッセージ本文\n" . $fm7['your-message'] . "\n\n";
}
return $mes;
}
function getAccessToken($jwttoken){
global $ClientID;
$secret = "(★2の、「Client Secret」を入れる(英数字、記号))";
$url = "https://auth.worksmobile.com/oauth2/v2.0/token";
$options = [
'form_params' => [
"grant_type" => urlencode("urn:ietf:params:oauth:grant-type:jwt-bearer"),
"assertion" => $jwttoken,
"client_id" => $ClientID,
"client_secret" => $secret,
"scope" => "bot"
],
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded'
]
];
$client = new Client();
$response = $client->request("POST", $url, $options);
$status = (string) $response->getStatusCode();
$body = $response->getBody();
$json = json_decode($body, true);
return $json["access_token"];
}
function send_mes(){
$botno = '(★4の「Bot No.」の数字)';
$cahnnelID = "(★5の「チャンネルID」を入れます(英数字、記号))";
$message = get_form_mes();
$jwt = get_jwt();
$token_now = getAccessToken($jwt);
$url = "https://www.worksapis.com/v1.0/bots/$botno/channels/$cahnnelID/messages";
$options = [
'json' => [
"content" => [
"type" => "text",
"text" => $message
]
],
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => "Bearer $token_now"
]
];
$client = new Client();
$response = $client->request("POST", $url, $options);
}
?>
<?php
require_once 'jwt/src/BeforeValidException.php';
require_once 'jwt/src/ExpiredException.php';
require_once 'jwt/src/SignatureInvalidException.php';
require_once 'jwt/src/JWT.php';
use \Firebase\JWT\JWT;
require_once 'vendor/autoload.php';
use GuzzleHttp\Client;
$key = "(★1の内容を入れる(複数行、英数字、記号))";
$ClientID = "(★2の「Client ID」を入れる(英数字、記号))";
function get_jwt(){
global $key,$ClientID;
$ServiceAccount = "(★3の「Service Account」を入れる(英数字、記号))";
$header = '{"alg":"RS256","typ":"JWT"}';
$header = base64_encode($header);
$header = str_replace(array('+','/','='), array('-','_',''), $header);
$body = ['iss'=>"$ClientID",
'sub'=>"$ServiceAccount",
'iat'=>time(),
'exp'=>time()+1800
];
$body = json_encode($body);
$body = base64_encode($body);
$body = str_replace(array('+', '/', '='), array('-', '_', ''), $body);
$data = $header.".".$body;
openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256);
$signature = base64_encode($signature);
$signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature);
$jwt = $header . "." . $body . "." . $signature;
return $jwt;
}
function get_form_mes(){
$submission = WPCF7_Submission::get_instance();
if($submission) {
$fm7 = $submission->get_posted_data();
$mes = "氏名\n" . $fm7['your-name'] . "\n\n";
$mes .= "メールアドレス\n" . $fm7['your-email'] . "\n\n";
$mes .= "題名\n" . $fm7['your-subject'] . "\n\n";
$mes .= "メッセージ本文\n" . $fm7['your-message'] . "\n\n";
}
return $mes;
}
function getAccessToken($jwttoken){
global $ClientID;
$secret = "(★2の、「Client Secret」を入れる(英数字、記号))";
$url = "https://auth.worksmobile.com/oauth2/v2.0/token";
$options = [
'form_params' => [
"grant_type" => urlencode("urn:ietf:params:oauth:grant-type:jwt-bearer"),
"assertion" => $jwttoken,
"client_id" => $ClientID,
"client_secret" => $secret,
"scope" => "bot"
],
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded'
]
];
$client = new Client();
$response = $client->request("POST", $url, $options);
$status = (string) $response->getStatusCode();
$body = $response->getBody();
$json = json_decode($body, true);
return $json["access_token"];
}
function send_mes(){
$botno = '(★4の「Bot No.」の数字)';
$cahnnelID = "(★5の「チャンネルID」を入れます(英数字、記号))";
$message = get_form_mes();
$jwt = get_jwt();
$token_now = getAccessToken($jwt);
$url = "https://www.worksapis.com/v1.0/bots/$botno/channels/$cahnnelID/messages";
$options = [
'json' => [
"content" => [
"type" => "text",
"text" => $message
]
],
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => "Bearer $token_now"
]
];
$client = new Client();
$response = $client->request("POST", $url, $options);
}
?>
ワードプレストの連携
該当wordpressの「function.php」に
以下の2行を入れます。lineworks.phpは、前述のプログラムを保存したファイル名です。
require get_template_directory() . '/lineworks.php';
add_action('wpcf7_mail_sent', 'send_mes', 10, 1);
require get_template_directory() . '/lineworks.php';
add_action('wpcf7_mail_sent', 'send_mes', 10, 1);
require get_template_directory() . '/lineworks.php';
add_action('wpcf7_mail_sent', 'send_mes', 10, 1);
実際にやってみる
お問い合わせフォームから、送信すると


↑ トークルームに書き込まれました。