WOFF アプリで SDK を使用して WOFF の処理を行う際には、以下の流れで処理を行います。
WOFF SDK を使用する際には、最初に woff.init() メソッドを実行します。
woff.init() メソッドは WOFF アプリを初期化し、WOFF アプリで WOFF SDK の他のメソッドを呼び出すことができるようにします。
woff.init() は Endpoint URL に初めてリダイレクトされるときに実行されます。
他のタイミングで実行すると、INIT_FAILED エラーが発生しWOFF アプリを開くことができなくなります。
woff.init() の woffId には Developer Console で WOFF アプリを登録した際に発行された WOFF ID を入力します。
woff .init({ woffId: "123456-abcedfg" // 発行された WOFF ID を指定する }) .then(() => { // WOFF API を実行する }) .catch((err) => { // 初期化処理中にエラーが発生した場合 console.log(err.code, err.message); });注意事項
- woff.init() は、ページ読み込みが完了した後 (load イベント後) に実行してください。適切に初期化が実行されない場合があります。
- WOFF アプリが実行されると、URL に付与された woff.state や access_token の情報を基に woff.init() が実行されます。初期化を正しく実行するために、フロントエンドの処理が完了する前に URL を変更しないでください。
- WOFF アプリが最初に実行される URL には、woff.state にアクセストークンなどの機密情報が含まれているため、外部ロギングツールに URL 情報を送信しないことをお勧めします。
OIDC では、クライアントは認証リクエストの scope パラメータに openid を含めて明示的に渡す必要があります。WOFF SDK では、woff.init() と woff.login() の scope パラメータで、呼び出し時に OIDC の scope を直接指定できます (WOFF SDK 3.7.4 以降)。
scope は次の優先順位で決まります。
参考
- scope には、アプリで選択した Scope の一部だけを指定できます。この場合、アクセストークンには指定した scope だけが付与されるため、WOFF アプリから呼び出す API の Scope (例: user.read) も含める必要があります。
- アプリで選択していない Scope を指定すると、認証リクエストが拒否されます。
- openid を含めた場合のみ、ID トークンが発行されます。発行された ID トークンは woff.getIDToken() と woff.getDecodedIDToken() で取得できます。
woff.isInClient() メソッドと woff.getOS() メソッドを呼び出して、WOFF アプリが実行されている環境を取得します。
WOFF アプリから実行されることを前提としている処理を実装する場合は、woff.isInClient() メソッドの結果が true の場合のみに処理するように実装します。
woff.openWindow() メソッドは、LINE WORKS のアプリ内ブラウザもしくは外部ブラウザで指定された URL を実行します。
woff.sendMessage() メソッドは、ユーザーに代わって WOFF アプリが開かれたトークルームにテキストメッセージを送信します。
次のコードではボタンがクリックされた際に "Hello、Works!" をトークルームに送信します。
document.getElementById('sendMessageButton').addEventListener('click', function(){ if (!woff.isInClient()) { sendAlertIfNoInClient(); } else { woff.sendMessage({ 'content': 'Hello、Works!' }).then(function() { window.alert('Message sent'); }).catch(function(error){ window.alert('Error sending message:' + error); }); }});woff.sendFlexMessage()メソッド を使用すると Flexible Template を使用して WOFF アプリが開かれたトークルームにメッセージを送信します。
woff.closeWindow() メソッドを実行すると、WOFF アプリが終了します。
WOFF アプリを初期化します。
woff.init() を呼び出した後に、他のメソッドを呼び出すことができます。 初期化が実行される際に、LINE WORKS からアプリを実行したユーザーのアクセストークンを取得できます。
WOFF アプリが初期化される前に実行可能なメソッド
- woff.ready
- woff.getOS()
- woff.getVersion()
- woff.getWorksVersion()
WOFF アプリの初期化の注意事項
- woff.init() は、ページ読み込みが完了した後 (load イベント後) に実行してください。適切に初期化が実行されない場合があります。
- woff.init() は Endpoint URL に初めてリダイレクトされるときに実行されます。他のタイミングで実行すると、INIT_FAILED エラーが発生し WOFF アプリを開くことができなくなります。
- WOFF アプリが実行されると、URL に付与された woff.state や access_token の情報を基に woff.init() が実行されます。初期化を正しく実行するために、フロントエンドの処理が完了する前に URL を変更しないでください。
- WOFF アプリが最初に実行される URL には、woff.state にアクセストークンなどの機密情報が含まれているため、ロギングツールなどの外部に URL 情報を送信しないように注意してください。
| name | type | description |
|---|---|---|
| config | Object | WOFF アプリの設定情報 |
| config.woffId | String | WOFF ID |
| config.redirectUri | String | ログイン後に移動する URL (WOFF SDK 3.7.4 以降) woff.login() で loginConfig.redirectUri を指定した場合は、その値が優先されます。 |
| config.scope | String | OIDC ログイン時に使用する scope。半角スペースで区切った文字列で渡します (例: "openid profile")。 外部ブラウザ環境ではログイン時に渡され、モバイルアプリ環境では無視されます。woff.login() で loginConfig.scope を指定した場合は、その値が優先されます。 |
| successCallback | Function | WOFF アプリの初期化が成功した時に実行するコールバック関数 |
| errorCallback | Function | WOFF アプリの初期化が失敗した時に実行するコールバック関数 |
// 基本woff.init( config, successCallback, errorCallback)// Promise オブジェクトを使用した方法woff .init({ woffId: "123456-abcedfg" // 発行された WOFF ID を指定する }) .then(() => { // WOFF API を実行する }) .catch((err) => { // 初期化処理中にエラーが発生した場合 console.log(err.code, err.message); });// コールバックを使用する方法woff.init({ woffId: "123456-abcedfg" }, successCallback, errorCallback);// OIDC の scope を指定する方法 (外部ブラウザ環境ではログイン時に渡される)woff .init({ woffId: "123456-abcedfg", scope: "openid profile" }) .then(() => { // WOFF API を実行する }) .catch((err) => { // 初期化処理中にエラーが発生した場合 console.log(err.code, err.message); });Promise オブジェクトを返します。
woff.init() を実行して WOFF アプリの初期化が完了した後に実行するアクションを記述します。
woff.ready.then(() => { // woff.init が完了した後に処理を行う})woff.init() 実行時にエラーが発生しても WoffError オブジェクトを返しません。また、woff.ready も reject しません。
WOFFアプリが開いているトークルームのチャンネル ID を取得します。
注意
- この API は、モバイルアプリでのみ利用できます。
- トークルーム以外の画面で WOFF アプリが実行されている場合はチャンネル ID を取得できません。
- この API は、WOFF SDK 3.7.1 以降で利用できます。
なし
woff.getChannelId()Promiseオブジェクトが返されます。
| Return value | Description |
|---|---|
| channelId | トークルームのチャンネル ID |
WOFF アプリを実行する環境を取得します。
なし
woff.getOS()WOFF アプリが実行されている環境が文字列として返されます。
| return value | description |
|---|---|
| ios | iOS or iPadOS |
| android | Android |
| web | 上記以外の環境の場合 |
WOFF アプリが実行される環境の言語設定を取得します。
なし
woff.getLanguage()WOFF アプリが実行される環境の navigator.language が返されます。
WOFF SDK のバージョンを取得します。
なし
woff.getVersion()WOFF SDK のバージョンが文字列として返されます。
ユーザーの LINE WORKS バージョンを取得します。
なし
woff.getWorksVersion()ユーザーの LINE WORKS バージョンが文字列として返されます。
注意
- PC ブラウザでは利用できません。
WOFF アプリが LINE WORKS 内の WOFF ブラウザで実行されていることを確認します。
なし
woff.isInClient()| return value | description |
|---|---|
| true | LINE WORKS 内の WOFF ブラウザで実行されている場合 |
| false | LINE WORKS 内の WOFF ブラウザ以外で実行されている場合 (ブラウザなどで直接アクセスした場合など) |
WOFF アプリにログインします。
注意
- 外部ブラウザ環境で WOFF アプリを実行する際に必要です。
- LINE WORKS 内の WOFF ブラウザ上では woff.init() 時に実行されるため不要です。
- woff.login() 実行後は woff.init() を再度実行する必要があります。
| name | type | description |
|---|---|---|
| loginConfig | Object | ログイン設定 |
| loginConfig.redirectUri | String | ログイン後に移動する URL 設定しない場合は、WOFF アプリに登録された Endpoint URL に移動します。 |
| loginConfig.domain | String | ドメイン名 (フリープラン・スタンダードプランの場合は、グループ名) SSO 機能を利用する場合には必須。 |
| loginConfig.scope | String | OIDC ログイン時に使用する scope。半角スペースで区切った文字列で渡します (例: "openid profile")。 指定すると、woff.init() の config.scope を上書きします。 openid Scope が付与されたアプリでは、scope が空の場合に LINE WORKS の認証サーバーがエラーを返すため、openid を含めて指定する必要があります。 |
if (!woff.isLoggedIn()) { woff.login({ redirectUri: "https://example.com/path" }); // Verifies whether domain name and path of the specified URL}// OIDC の scope を指定するif (!woff.isLoggedIn()) { woff.login({ redirectUri: "https://example.com/path", scope: "openid profile" });}// SSO + OIDCif (!woff.isLoggedIn()) { woff.login({ redirectUri: "https://example.com/path", domain: "example.com", scope: "openid" });}なし
ユーザーがログインしていることを確認します。
なし
woff.isLoggedIn()| return value | description |
|---|---|
| true | ユーザーがログインしている状態 |
| false | ユーザーがログインしていない状態 |
WOFF アプリからログアウトします。
注意
- ログアウトすると、WOFF のアクセストークンは削除されます。
なし
woff.logout()なし
現在のユーザーのアクセストークンを取得します。
この API で取得したアクセストークンを使用して、バックエンドでユーザー情報を取得する等が可能です。
注意
- 外部ブラウザで woff.init() または woff.login() の scope を指定した場合、アクセストークンには要求した scope だけが付与されます。WOFF アプリから呼び出す API の Scope (例: user.read) も scope に含める必要があります。
- woff.init() または woff.login() で scope を指定しない場合、このアクセストークンが持つ権限範囲には、アプリで選択された全ての Scope が含まれます。
外部ブラウザで WOFF アプリを使用する場合は、以下の手順によりアクセストークンを取得できます。
なし
woff.getAccessToken()現在のユーザーのアクセストークンを文字列として返します。
現在のユーザーの ID トークン (JWT) を、元の文字列のまま取得します。OIDC の scope に openid を含めてログインした場合のみ取得できます。
参考
- ID トークンを使ってサーバーでユーザーを識別する場合は、このメソッドで取得した元の文字列をサーバーに送り、サーバーで ID Token の検証 を行ってから使用してください。
なし
const idToken = woff.getIDToken();ID トークン (JWT) を文字列として返します。ID トークンが発行されていない場合は null を返します。
現在のユーザーの ID トークンの payload をデコードしたオブジェクトを取得します。OIDC の scope に openid を含めてログインした場合のみ取得できます。
注意
- このメソッドは ID トークンの署名を検証せず、payload をデコードした値だけを返します。画面表示などクライアント側の用途に限って使い、サーバーでユーザーを識別する場合は woff.getIDToken() で取得した元のトークンを検証して使用してください。
なし
const claims = woff.getDecodedIDToken();if (claims) { console.log(claims.sub, claims.name, claims.email);}ID トークンの payload (claim) をオブジェクトとして返します。ID トークンが発行されていない場合は null を返します。
含まれる claim は OIDC の scope によって異なります。詳しくは ID Token の仕様 - Payload を参照してください。
WOFF アプリのコンテキスト情報を取得します。
なし
woff.getContext()| return value | description |
|---|---|
| viewType | WOFF アプリサイズ (compact、tall、full) 外部ブラウザで開いた場合は external が入ります。 |
| endpointUrl | サービスエンドポイント URL |
| clientId | WOFF アプリの Client ID |
| clientType | WOFF アプリが実行された環境の種類 (PC_WEB、MOBILE_APP、PC_APP) |
{ "viewType": "full", "endpointUrl": "https://example.com/my-app/", "permanentLinkPattern": "concat", "clientId": "_K3ELJuSyEJQlNrkjPPP", "clientType": "MOBILE_APP"}ユーザーのプロフィール情報を取得します。
なし
woff.getProfile()Promiseオブジェクトが返されます。
| return value | description |
|---|---|
| domainId | ドメイン ID |
| userId | ユーザー ID |
| displayName | ユーザー名 |
WOFF アプリが開いているトークルームにユーザーに代わってメッセージを送信します。
注意
- この API を利用するには bot または bot.message Scope が必要です。
- この API は、モバイルアプリでのみ利用できます。
- トークルーム以外の画面で WOFF アプリが実行されている場合はメッセージを送信できません。
| name | type | description |
|---|---|---|
| message | Object | required |
| message.content | Object | トークルームに送信されるメッセージコンテンツ required |
woff.sendMessage({ content: "Hello、World!"}) .then(()=> { console.log('message sent'); }) .catch((err)=> { console.log('error', err); });Promise オブジェクトを返します。
WOFF アプリが開いているトークルームにユーザーに代わって Flexible Template メッセージを送信します。
注意
- この API を利用するには bot または bot.message Scope が必要です。
- この API は、モバイルアプリでのみ利用できます。
- トークルーム以外の画面で WOFF アプリが実行されている場合はメッセージを送信できません。
| name | type | description |
|---|---|---|
| message | Object | required |
| message.flex | String | トークルームに送信する Flexible Template メッセージ required |
woff.sendFlexMessage({ flex: { "type": "flex", "altText": file.name, "contents": { "type": "bubble", "size": "kilo", ... } }}) .then(() => { console.log('message sent'); }) .catch((err) => { console.log('error', err); });Promise オブジェクトを返します。
QR コードリーダーを起動して QR コードの読み込みを行います。 QR コードリーダーを有効にするには、Developer Console で WOFF アプリの Scan QR オプションを有効にする必要があります。
woff.scanQR() は以下の環境で動作します。
なし
woff.scanQR() .then((result) => { // result = { value: "" } }) .catch((err) => { console.log('error', err); });Promise オブジェクトを返します。
| return value | description |
|---|---|
| value | QR コードリーダーがスキャンした文字列 |
LINE WORKS のアプリ内ブラウザまたは外部ブラウザで指定された URL を開きます。外部ブラウザで実行すると正常に動作しない可能性があります。
| name | type | description |
|---|---|---|
| params | Object | |
| params.url | String | URLの絶対パス |
| params.external | Boolean | 外部ブラウザで URL を開くかどうか (true:外部ブラウザ、false:アプリ内ブラウザ) |
woff.openWindow({ url: "https://developers.worksmobile.com", external: true});なし
WOFF アプリを終了します。外部ブラウザで実行すると正常に動作しない可能性があります。
なし
woff.closeWindow()なし
LINE WORKS アプリ (iOS/Android) に、PIP (Picture-in-Picture) モードへの移行を要求します。ビデオ通話など、マルチタスクが必要な WOFF アプリで使用します。
注意
- この API は、モバイルアプリ (LINE WORKS アプリ) でのみ動作します。外部ブラウザや、PIP に対応していないバージョンの LINE WORKS アプリでは何も実行されません。
- PIP モードを終了する API は提供されていません。PIP ウィンドウのドラッグ、終了、復帰は LINE WORKS アプリが処理します。
- この API は、WOFF SDK 3.7.4 以降で利用できます。
なし
woff.startPipMode()なし
WOFF SDKでのエラーは WoffError オブジェクトで返されます。
| name | type | description |
|---|---|---|
| code | String | エラーコード |
| message | String | エラーメッセージ |
| code | description |
|---|---|
| 400 | JSON フォーマットが正しくないなど、リクエストに問題がある場合に返されます。 |
| 401 | Authorization ヘッダーが正しく送信されていない場合に返されます。 |
| 403 | API を使用する権限がない場合に返されます。 |
| 429 | Rate Limit に達した場合に返されます。API の呼び出し回数を減らす必要があります。 |
| 500 | API サーバーの一時的なエラーが発生した場合に返されます。 |
| INIT_FAILED | WOFF SDK の初期化に失敗した場合に返されます。 |
| INVALID_ARGUMENT | 不正な引数を使用した場合に返されます。 |
| UNAUTHORIZED | LINE WORKS のログインができない場合に返されます。API 呼び出し時に正しいアクセストークンを指定したことを確認する必要があります。 |
| FORBIDDEN | 必要な権限がない、またはサポートされていない環境で使用した場合に返されます。 |
| INVALID_CONFIG | Developer Console での設定が正しくない場合に返されます。 |
| INVALID_ID_TOKEN | ID トークンが正しくない場合に返されます。 |
| EXCEPTION_IN_SUBWINDOW | サブウィンドウで問題が発生した場合に返されます。 |