#コラボチャット: 投稿

#コラボチャット: 投稿

#コラボチャット: 投稿

translate #Collab-Chat: Post

任意テキストをコラボチャット(Collab-Chat: Questetraワークフロー基盤の社内チャット)に投稿します。チャンネルを指定して投稿します。組織チャンネルやプロセスチャンネルへの投稿はid(例 “g12” や “p123″)を指定し、ユーザ作成チャンネルへの投稿はチャンネル名(例 “general”)を指定します。

Auto Step icon
Configs for this Auto Step
StrConfA1
A1: 投稿テキスト(投稿文)をセットしてください#{EL}
SelectConfA2
A2: 添付ファイルが格納されているファイル群型データを選択してください (最大10)
StrConfA3
A3: リンクURLを(複数ある場合は各行に)セットしてください (最大10)#{EL}
BoolConfB0
B0: チャンネル自動作成 Off ⇔ On
StrConfB1
B1: 投稿チャンネルをセットしてください (例: “g12”, “general”) *#{EL}
StrConfB2
B2: クロス投稿したい場合、そのチャンネルを各行にセットして下さい#{EL}
StrConfC1
C1: クロスからメイン投稿へリンクさせたい場合、基盤URLをセット (例 “${var[applicationRoot]}”)#{EL}
SelectConfC2
C2: メイン投稿のメッセージURLを格納する文字列型データ項目を指定してください
Script (click to open)
// Script Example of Business Process Automation
// for 'engine type: 3' ("GraalJS standard mode")
// cf. 'engine type: 2' ("GraalJS Nashorn compatible mode") (renamed from "GraalJS" at 20230526)

//////// START "main()" ////////////////////////////////////////////////////////////////
main();
function main(){ 

//// == Config Retrieving / 工程コンフィグの参照 ==
const strText           = configs.get       ( "StrConfA1" );    // NotRequired
const filesPocketAttach = configs.getObject ( "SelectConfA2" ); // NotRequired
const strUrls           = configs.get       ( "StrConfA3" );    // NotRequired
const boolCreateChannel = configs.getObject ( "BoolConfB0" );   // TOGGLE
const strMainChannel    = configs.get       ( "StrConfB1" );    /// REQUIRED
const strCrossChannels  = configs.get       ( "StrConfB2" );    // NotRequired
  let arrCrossChannels  = strCrossChannels !== "" ?
                          strCrossChannels.split("\n") :
                          null;
const strApplicationRoot = configs.get      ( "StrConfC1" );    // NotRequired
const strPocketC2       = configs.getObject ( "SelectConfC2" ); // NotRequired



//// == Data Retrieving / ワークフローデータの参照 ==
let filesAttach = null;
if( filesPocketAttach !== null ){
    filesAttach = engine.findData( filesPocketAttach );
    // java.util.ArrayList
    // List<com.questetra.bpms.core.event.scripttask.QfileView>
}
if( strText === "" && filesAttach === null && strUrls === "" ){
  throw new Error( "\n AutomatedTask ConfigError:" +
                   " No data in Config {A1} {A2} {A3} \n" );
}



//// == Calculating / 演算 ==
/// create Channels
if ( boolCreateChannel ){
  try {
    feedService.createPublicChannel ( strMainChannel );
    engine.log( " AutomatedTask: Channel created - " + strMainChannel );
  } catch(e) { // if error, channel already exists, etc
    engine.log( " AutomatedTask: Channel Creation " + strMainChannel + " - " + e.getMessage() );
  }
  for ( let i = 0; i < arrCrossChannels.length; i++ ){
    if( arrCrossChannels[i] !== "" ){
      try {
        feedService.createPublicChannel ( arrCrossChannels[i] );
        engine.log( " AutomatedTask: Channel created - " + arrCrossChannels[i] );
      } catch(e) { // if error, channel already exists, etc
        engine.log( " AutomatedTask: Channel Creation " + arrCrossChannels[i] + " - " + e.getMessage() );
      }
    }
  }
}


/// prepare CollabChat Message
let chatMsg = feedService.begin(); // FeedServiceWrapper
  // com.questetra.bpms.core.event.scripttask.FeedServiceWrapper

let strFooter = "\n\n -- auto posted to #" + strMainChannel;
if ( arrCrossChannels !== null ){
  strFooter += " & crossposted to";
  for ( let i = 0; i < arrCrossChannels.length; i++ ){
    if( arrCrossChannels[i] !== "" ){
      strFooter += " #" + arrCrossChannels[i];
    }
  }
}
chatMsg = chatMsg.setMessage( strText + "\n" + strFooter );

if( filesAttach !== null ){
  let numFilesSize = filesAttach.size() - 0;
  for( let i = 0; i < numFilesSize; i++ ){
    chatMsg = chatMsg.attachFile( filesAttach.get(i) );
    engine.log(
      " AutomatedTask AttachedFile:" +
      " '" + filesAttach.get(i).getName()        + "'"      +
      " (" + filesAttach.get(i).getLength()      + " byte)" +
      " '" + filesAttach.get(i).getContentType() + "'"
    );
  }
}
if( strUrls !== "" ){
  const arrUrls = strUrls.split("\n");
  for( let i = 0; i < arrUrls.length; i++ ){
    if( arrUrls[i] !== "" ){
      chatMsg = chatMsg.attachLink( arrUrls[i] );
      engine.log(
        " AutomatedTask AttachedLink:" +
        " '" + arrUrls[i] + "'"
      );
    }
  }
}


/// post to Main channel
engine.log( " AutomatedTask CollabChat Main: Post" );
const numPostedMsgMain = chatMsg.setChannel( strMainChannel )
                         .post() - 0; // Java Long to Javascript number
engine.log( " AutomatedTask CollabChat Message ID: "  + numPostedMsgMain );
const strMainUrl = strApplicationRoot +
                   "Feed/Timeline/message?messageId=" +
                   numPostedMsgMain;
// https://example.questetra.net/Feed/Timeline/message?messageId=103349204
// https://example.questetra.net/Feed/Timeline/Topic/104877766/Message/103349204


/// cross-post to Channels
if ( arrCrossChannels !== null ){
  if( strApplicationRoot !== "" ){
    chatMsg = chatMsg.attachLink( strMainUrl );
  }
  for ( let i = 0; i < arrCrossChannels.length; i++ ){
    if( arrCrossChannels[i] !== "" ){
      try {
        engine.log( " AutomatedTask CollabChat Cross: Post" );
        const numPostedMsgCross = chatMsg.setChannel( arrCrossChannels[i] )
                                  .post() - 0; // Java Long to Javascript number
        engine.log( " AutomatedTask CollabChat Message ID: "  + numPostedMsgCross );
      } catch(e) { // if error, channel already exists, etc
        engine.log( " AutomatedTask Warning Channel not found: "  + arrCrossChannels[i] );
      }
    }
  }
}



//// == Data Updating / ワークフローデータへの代入 ==
if ( strPocketC2 !== null ){ 
  engine.setData( strPocketC2, strMainUrl );
}



} //////// END "main()" /////////////////////////////////////////////////////////////////

/*
Notes:
- When the process reaches the automated step, the text is automatically posted.
    - Posted by the special icon "Questetra" who cannot be followed.
- Specify the channel (main posting destination) to post to. (Standard config)
    - For organization channels, set it in the format of `g1` or `g123`.
    - For process channels, set it in the format of `p1` or `p123`.
    - For process channel itself, set as `p#{processInstanceId}`.
- Specify the channel to cross post to if necessary. (Expert config)
    - The same text as the main post will be posted.
    - No error will occur even if the channel does not exist. (Warning)
    - The URL to the main post is also available.
    - Useful to aggregate users' Comments on the main post.

APPENDIX-en:
- No need to set authentication or authorization (OAuth2) when modeling.
    - There is no way to post from the standpoint of a specific user.
- There is no function to delete posts by special contributors (As of April 2025)
- Error will occur if attached more than 10 links or files.

Notes-ja:
- 案件が自動工程に到達した際に、「投稿文」が自動投稿されます。 (CollabChat Post)
    - 特別な投稿者「Questetra」のアイコンで投稿されます。
- 投稿先チャンネル(メイン投稿先)を指定します。 (Standard 設定)
    - 組織チャンネルの場合、`g1` や `g123` のような書式でセットしてください。
    - プロセスチャンネルの場合、`p1` や `p123` のような書式でセットしてください。
    - 自身のプロセスチャンネルの場合、`p#{processInstanceId}` とセットしてください。
- 必要に応じてクロス投稿先のチャンネルを指定します。 (Expert 設定)
    - メイン投稿と同じ文章が投稿されます。
    - チャンネルが存在しない場合でもエラー終了しません。(Warning)
    - メイン投稿へのURLを添付することも可能です。
    - ユーザの[コメント]をメイン投稿で集約させたい場合などに便利です。

APPENDIX-ja:
- モデリング時に認証情報や認可(OAuth2)を設定する必要はありません。
    - 特定ユーザの立場で投稿する方法はありません。
- 特別な投稿者の投稿(ワークフローエンジンの立場からの投稿)を削除する機能はありません。(2025年4月現在)
- リンクやファイルの添付が10を超えるとエラーになります。
*/

Download

warning 自由改変可能な JavaScript (ECMAScript) コードです。いかなる保証もありません。
(アドオン自動工程のインストールは Professional editionでのみ可能です)

Notes

  • 案件が自動工程に到達した際に、「投稿文」が自動投稿されます。 (CollabChat Post)
    • 特別な投稿者「Questetra」のアイコンで投稿されます。
  • 投稿先チャンネル(メイン投稿先)を指定します。 (Standard 設定)
    • 組織チャンネルの場合、g1g123 のような書式でセットしてください。
    • プロセスチャンネルの場合、p1p123 のような書式でセットしてください。
    • 自身のプロセスチャンネルの場合、p#{processInstanceId} とセットしてください。
  • 必要に応じてクロス投稿先のチャンネルを指定します。 (Expert 設定)
    • メイン投稿と同じ文章が投稿されます。
    • チャンネルが存在しない場合でもエラー終了しません。(Warning)
    • メイン投稿へのURLを添付することも可能です。
    • ユーザの[コメント]をメイン投稿で集約させたい場合などに便利です。

Capture

Appendix

  • モデリング時に認証情報や認可(OAuth2)を設定する必要はありません。
    • 特定ユーザの立場で投稿する方法はありません。
  • 特別な投稿者の投稿(ワークフローエンジンの立場からの投稿)を削除する機能はありません。(2025年4月現在)
  • 投稿テキストの長さが8000を超えるとエラーになります。
  • リンクやファイルの添付数が10を超えるとエラーになります。
  • “各行に複数URL” の正規表現例は ^(https:\/\/\S+\r?\n)*https:\/\/\S+$ となります。
  • 他のチャンネルへのクロス投稿例(チャンネルID未入力でもエラーにならない設定)
    • #{#q_channelId == null ? '' : #q_channelId}
  • プロセスID等が自動投稿されるようにしておくと、権限者がプロセスデータを参照しやすくなります。
    • <#{processModelInfoName}> #p#{processInstanceId} ##{#q_channelId == null ? '' : #q_channelId} #{#q_user == null ? '' : 'by @[' + #q_user?.name + ']'}

Best Practice (商談報告プロセスの場合)

  • 社内議論の場として 商談助言 チャンネルと 製品要望 チャンネルを作成する。
    • [ユーザ作成チャンネル](パブリック)として作成する。(内部統制〔統制活動〕の相互牽制)
    • (機密情報が含まれる業務の場合は[プライベート]チャンネルにする)〔内部監査人を加える〕
  • 自動工程『#コラボチャット: 投稿』の “投稿文” を設定する。
    • データ項目『見込案件概要と確度』の変数(eg: #{#q_opportunities})をセットする。
    • データ項目『顧客から聞いた要望』の変数(eg: #{#q_customer_needs})をセットする。
    • “プロセスチャンネルへのリンク” の変数(eg: #p#{processInstanceId} )もセットする。
      • ワークフローアプリ特権[データ閲覧権限]を持つユーザは[プロセス詳細]に遷移しやすくなる。
  • 自動工程『#コラボチャット: 投稿』の “投稿先チャンネル” を設定する。
    • 『メイン投稿先』に #商談助言 をセットする。
    • 『クロス投稿先』に #製品要望 をセットする。
      • 『顧客から聞いた要望』が無い場合にクロス投稿しない設定
      • #{#q_customer_needs == null ? '' : '#製品要望'}
    • 『クロス投稿先』に顧客チャンネル #{#q_customer_id} をセットする。(顧客ケースマネジメント)

See Also

上部へスクロール

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む