前提
- LINEチャネル開設済
- 送りたいユーザとのLINE連携が済んでいる(LINEのUserIDが分かる状態)
- VF側で任意の画像を選択し、Apexクラス側にデータを渡す処理が実装済
※apex:inputFileタグなどを使用
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_compref_inputFile.htm
やりたいこと
- salesforceのアプリから、LINEに画像を送りたい
どうすれば送信できるか
- まず、誰でもアクセスできる画像URLの作成方法を調査。
- 見つけた方法が「ファイル」機能の「公開リンク」
→このリンクは、誰でもアクセスし、画像をダウンロードすることができる。
そのため、公開リンクをApexで作成し、表示されている画像のURLを使用すれば良い。 - ContentVersionオブジェクトとContentDistributionオブジェクトを使用する
実装内容
- 画像URL作成処理
ContentVersion conte = new ContentVersion(
VersionData = bodyData, // アップロードした画像データが入る
PathOnClient = 'SendImage ' + System.now().format('MM/dd'), // 任意のファイル名
Title = 'SendImage ' + System.now().format('MM/dd') // 任意のファイル名
);
insert conte;
ContentDistribution cdl = new ContentDistribution(
ContentVersionId = conte.id, // ContentVesrionのid
Name = 'SendImageUrl ' + System.now().format('MM/dd') // 任意のファイル名
);
insert cdl;
// レコードを作成してからDistributionPublicUrlを取得する
ContentDistribution cdlUrl = [SELECT DistributionPublicUrl FROM ContentDistribution WHERE Id = :cdl.Id LIMIT 1];
// 取得したurlを元に、画像のURLを作成する
Organization oid = [SELECT Id FROM Organization LIMIT 1];
// DistributionPublicUrlの「/a/」より後ろの文字列が必要
String dUrl = cdlUrl.DistributionPublicUrl.substringAfterLast('/a/');
String imageUrl = 'https://[domain]--c.documentforce.com/sfc/dist/version/renditionDownload?
rendition=ORIGINAL_Jpg&versionId=' + conte.Id + '&d=/a/' + dUrl + '&oid=' + oid.Id;
- LINEへの送信処理
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://api.line.me/v2/bot/message/push');// MessagingAPIで指定されている送信時URL
request.setMethod('POST');
request.setHeader('Content-Type', 'application/json;');
request.setHeader('Authorization', 'Bearer ' + token); // チャネルtokenを後ろにつける
String body = '{"to": "[送信先のUserId]", "messages": [{"type":"image", "originalContentUrl":"[画像URL]", "previewImageUrl":"[画像URL]"}]}';
request.setBody(body);
HttpResponse response = http.send(request);
注意点
- salesforceの仕様上、insert処理を、コールアウト処理の前に実行することはできない。
そのため、insert処理とコールアウト処理を分割する必要がある。
回避方法については以下を参照
https://help.salesforce.com/articleView?id=000326129&type=1&sfdcIFrameOrigin=null&mode=1