ஸ்லாஷ் கட்டள்கள்

ஒரு தனிப்படுத்தப்பட்ட ஸ்லாஷ் கட்டளையுள், பயனர்கள் செய்திப் பெட்டியில் /எதையாவது தட்டி உங்கள் சேவையை அழைக்க முடியும். Antimatter அந்த கட்டளையுள் உங்கள் URL-க்கு அனுப்பி, உங்கள் பதிலை அந்த நபருக்கு மட்டும் அல்லது முழு சேனலுக்கும் காட்டுகிறது.

ஒரு ஸ்லாஷ் கட்டளையுள் எப்படி இயங்குகிறது

  1. ஒருவர் /weather Paris என்று தட்டி அனுப்புகிறார். அந்த உரை பதிவு செய்யப்படாது.
  2. Antimatter அந்த கட்டளையின் URL-க்கு ஒரு HTTP கோரிக்கையை அனுப்புகிறது; அதில் யார் தட்டினார், எங்கே, மற்றும் டிரிகர் வார்த்தையின் பின் உள்ள உரை உள்ளது.
  3. உங்கள் சேவை கோரிக்கையின் நேரம் முடிவாகும் முன் (இயல்பாக 30 வினாடிகள்) ஒரு செய்தியுடன் பதிலளிக்கிறது.
  4. Antimatter அந்த பதிலை காட்டுகிறது: அந்த நபருக்கு மட்டும் (ephemeral) அல்லது சேனலில் அனைவருக்கும்.

கட்டள்கள்கள் ஒரு குழுவைச் சேர்ந்தவை, அதில் டிரிகர் வார்த்தை ஒரே மாதிரியாக இருக்க வேண்டும். /join, /msg அல்லது /away போன்ற உள்ளமைந்த கட்டள்கள்களை மாற்ற முடியாது. ஆப்ஸ் (பிளக்-இன்கள்கள்) உம் கட்டள்கள்களை பதிவு செய்ய முடியும்; சர்வர் பகுதி பாருங்கள்.

ஒரு கட்டளையுள் உருவாக்குதல்

தனியார் ஸ்லாஷ் கட்டளைகள் இயல்பாக இயக்கப்பட்டுள்ளன (System Console › Integrations › Integration Management இல் Enable Custom Slash Commands, ServiceSettings.EnableCommands). சமூக நிர்வாகிகள் மற்றும் அமைப்பு நிர்வாகிகள் இவற்றை இயல்பாக உருவாக்க முடியும்.

  1. வலது மேலே உள்ள உங்கள் அவதாரத்தைத் திறந்து, பின்னர் Integrations › Slash commands, பின்னர் Add Slash Command எனத் தேர்ந்தெடுக்கவும்.
  2. Title மற்றும் Description (இணைப்புகள் பக்கங்களில் காட்டப்படும்) ஆகியவற்றை நிரப்பவும்.
  3. உதாரணமாக weather போன்ற Command Trigger Word ஐ, ஸ்லாஷ் குறியீடும் இடைவெளியும் இல்லாமல் உள்ளிடவும்.
  4. Request URL ஐ உள்ளிட்டு, Request Method ஐத் தேர்ந்தெடுக்கவும்: POST (இயல்பு) அல்லது GET.
  5. விருப்பத்திற்கு ஏற்ப Response Username மற்றும் Response Icon ஐ அமைக்கவும். இவை சேவையகம் இணைப்புகளுக்குப் பெயர்களையும் ஐகான்களையும் மாற்ற அனுமதிக்கும் போது மட்டுமே பயன்படுத்தப்படுகின்றன (பார்க்க Name and icon).
  6. பயனர்கள் / ஐ உள்ளிடும்போது கட்டளையைப் பட்டியலிட Autocomplete ஐக் குறிக்கவும், Autocomplete Hint (உதாரணமாக [city] போன்ற வாதங்கள்) மற்றும் Autocomplete Description உடன்.
  7. Save ஐத் தேர்ந்தெடுத்து, காட்டப்படும் டோக்கனை நகலெடுக்கவும். உங்கள் சேவை உங்கள் சேவையகத்திலிருந்து கோரிக்கைகள் வருவதைச் சரிபார்க்க இதைப் பயன்படுத்துகிறது.

API மூலம்: POST /api/v4/commands மூலம் {"team_id", "trigger", "url", "method": "P", "display_name", "description", "auto_complete": true, "auto_complete_hint", "auto_complete_desc", "username", "icon_url"} அனுப்பவும். POST-க்கு P, GET-க்கு G என method குறிக்கப்படும். புதிய token-ஐ வழங்க PUT /api/v4/commands/{command_id}/regen_token பயன்படுத்தவும்.

உங்கள் சேவை பெறும் கோரிக்கை

POST கட்டளை form-encoded body-ஐ (application/x-www-form-urlencoded) அனுப்பும்; GET கட்டளை அதே புலங்களை query string-இல் அனுப்பும். token-ம் Authorization: Token <token> header-இல் இருக்கும்.

புலம்மதிப்பு
tokenகட்டளையின் token. ஒவ்வொரு கோரிக்கையிலும் அதை சரிபார்க்கவும்.
commandஅதன் slash உடன் trigger, எடுத்துக்காட்டாக /weather.
texttrigger-க்கு பின் உள்ள எல்லாம், எடுத்துக்காட்டாக Paris.
user_id, user_nameயார் இதை இயக்கினர்.
channel_id, channel_nameஇது எங்கு இயக்கப்பட்டது.
team_id, team_domainபணியிடத்தின் ID மற்றும் URL பெயர்.
root_idதுவர்ப்பு (thread) பதில்களின் பெட்டியில் இயக்கப்பட்டால், அது.
trigger_idஉங்கள் பதில் ஒரு dialog-ஐ திறக்க அனுமதிக்கிறது (Dialogs காண்க). இது குறுகிய நேரத்திற்கு மட்டுமே செல்லுபடியாகும்.
response_urlபின்னர் கூடுதல் பதில்களை அனுப்ப ஒரு URL (Delayed answers காண்க).
user_mentions, user_mentions_ids, channel_mentions, channel_mentions_idsஉரைக்குள்ளே குறிப்பிடபப்டவான மக்களும் பொது சேனல்களும். #channel-name அல்லது ~channel-name என எழுதப்பட்டிருந்தாலும் சேனல்கள் எண்ணிக்கைக்குள் சேர்க்கபப்டும்.
தனியார் கட்டளைகள் இயங்க Site URL அமைக்கப்பட வேண்டும்: Antimatter இதைப் பயன்படுத்தி response_url ஐ உருவாக்குகிறது.

பதில்

JSON-ஆல் (Content-Type: application/json) 200 பதிலளிக்கவும்:

{
  "response_type": "in_channel",
  "text": "Paris: 18 °C, light rain",
  "attachments": []
}
புலம்அர்த்தம்
response_typeephemeral (இயல்புநிலை): கட்டளையை இயக்கிய நபர் மட்டுமே பதிலைக் காண்கிறார், reload-க்கு பின் அது வைக்கப்படாது. in_channel: பதில் சேனலில் வெளியிடப்படுகிறது.
text, attachmentswebhooks-களுக்கு போல: Markdown உரை மற்றும் attachments, buttons மற்றும் menus உட்பட.
username, icon_urloverrides அனுமதிக்கப்பட்டால், காட்ட வேண்டிய பெயர் மற்றும் படம். கட்டளையின் சொந்த அமைப்புகள் இவற்றை விட முன்னுரிமை பெறுகின்றன.
channel_idபதிலை வேறு சேனலில் வெளியிடவும், அந்த நபர் அதன் உறுப்பினராக இருக்க வேண்டும்.
goto_locationகட்டளை இயங்கிய பிறகு திறக்க ஒரு URL.
props, typewebhooks-களுக்கு போல, கூடுதல் பண்புகள் மற்றும் custom post type.
extra_responsesமேலும் பதில்கள், ஒவ்வொன்றும் அதே புலங்களுடன், முதல் பதிலுக்கு பின் வெளியிடப்படுகின்றன.
skip_slack_parsingtrue Slack-இல் உள்ளபடி links மற்றும் mentions-ஐ மாற்றாமல் உரையை அப்படியே வைக்கிறது.

JSON அல்லாத பதில், அதன் body-ஐ உரையாகக் கொண்ட ephemeral message-ஆக காட்டப்படுகிறது. 204 No Content எதுவும் காட்டாது. 200–299-க்கு வெளியே உள்ள எந்த status-மும் நபருக்கு error-ஐ காட்டுகிறது.

எடுத்துக்காட்டு சேவை

Python-இல், standard library மட்டுமே பயன்படுத்தி, ஒரு குறைந்தபட்ச கட்டளை சேவை:

import hmac
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs

TOKEN = "the token shown when you saved the command"

class Handler(BaseHTTPRequestHandler):
    def do_POST(self):
        body = self.rfile.read(int(self.headers["Content-Length"])).decode()
        form = {key: values[0] for key, values in parse_qs(body).items()}
        if not hmac.compare_digest(form.get("token", ""), TOKEN):
            self.send_response(401)
            self.end_headers()
            return
        answer = {
            "response_type": "ephemeral",
            "text": f"Hello @{form['user_name']}, you asked for: {form.get('text', '')}",
        }
        data = json.dumps(answer).encode()
        self.send_response(200)
        self.send_header("Content-Type", "application/json")
        self.end_headers()
        self.wfile.write(data)

HTTPServer(("0.0.0.0", 8080), Handler).serve_forever()

சேவை தனியார் நெட்வொர்க் முகவரியில் இயங்கினால், அமைப்பு நிர்வாகி Allow untrusted internal connections to (ServiceSettings.AllowedUntrustedInternalConnections) இல் அதற்கு அனுமதி அளிக்க வேண்டும்.

தாமதமான பதில்கள்

தொடர்பு நேரத்தை விட நீண்ட நேரம் எடுக்கும் பணிகளுக்கு, உடனடியாக பதில் அளிக்கவும் (உதாரணமாக, "Working on it…" போன்ற ஒரு தற்காலிக செய்தியுடன்), பின்னர் உண்மையான பதிலை response_url க்கு POST செய்யவும். பதிலுக்கு ஒரே JSON-ஐ இது ஏற்கிறது, மேலும் கட்டளையின் 30 நிமிடங்களுக்குள் 5 முறை வரை இது செயல்படும்.

curl -X POST "$RESPONSE_URL" -H 'Content-Type: application/json' \
  -d '{"response_type": "in_channel", "text": "Report ready: https://reports.example.com/42"}'

API மூலம் ஒரு கட்டளையை இயக்கு

ஸ்கிரிப்ட்கள் மற்றும் பாட்கள், அவை அதை தட்டச்சு செய்திருந்தால் போல, உள்வாங்கப்பட்ட அல்லது தனிப்பயன் கட்டளைகளை எந்தவொன்றையும் இயக்கலாம்:

curl -X POST https://chat.example.com/api/v4/commands/execute \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"channel_id": "'$CHANNEL_ID'", "command": "/weather Paris"}'

GET /api/v4/teams/{team_id}/commands/autocomplete என்பது ஒரு சமூகத்தில் மக்கள் autocomplete செய்யக்கூடிய கட்டளைகளின் பட்டியலை வழங்குகிறது.

Autocomplete

இணைப்புகள் பக்கங்களில் உருவாக்கப்பட்ட கட்டளைகள், அவற்றின் trigger, hint மற்றும் விளக்கத்துடன் autocomplete செய்யப்படுகின்றன. ஆப்ஸ் மூலம் பதிவு செய்யப்பட்ட கட்டளைகள், AutocompleteData மூலம், model.NewAutocompleteData(trigger, hint, helpText) இலிருந்து, அவற்றின் துணைக் கட்டளைகள் மற்றும் அர்க்குமெண்டுகளை விரிவாக விவரிக்கலாம்:

  • AddCommand(sub) ஒரு துணைக் கட்டளையை சேர்க்கிறது, அதுவும் ஒரு AutocompleteData.
  • AddTextArgument(helpText, hint, pattern) இலவச உரையை சேர்க்கிறது.
  • AddStaticListArgument(helpText, required, items) AutocompleteListItem{Item, Hint, HelpText} இல் ஒரு நிலையான பட்டியலை வழங்குகிறது.
  • AddDynamicListArgument(helpText, url, required) மக்கள் தட்டச்சு செய்யும்போது உங்கள் ஆப்ஸிடம் பரிந்துரைகளைக் கேட்கிறது. URL என்பது உங்கள் ஆப்ஸின் ஒரு route ஆகும், எடுத்துக்காட்டாக /plugins/com.example.weather/cities. இது பயனரை, சேனலை மற்றும் சமூகத்தை பெறுகிறது, மேலும் {"Item", "Hint", "HelpText"} இல் ஒரு JSON பட்டியலை திரும்பி அனுப்புகிறது.

Named… மாறுபாடுகள் (AddNamedTextArgument மற்றும் மற்றவை) --name value flags-ஐ சேர்க்கின்றன. இரண்டு web இடைமுகங்களும் இந்த பரிந்துரைகளை காட்டுகின்றன.

ஒருவர் ஒரு கட்டளை தட்டச்சு செய்யும்போது, Fusion அந்தக் கட்டளையையும் அதன் ஒவ்வொரு அளவீட்டையும் (arguments) ஒருவொன்றாகப் பிரித்துக் காட்டுகிறது; தட்டச்சு செய்யப்படும் அளவீடு அதன் உதவி உரை (help text) உடன் தனித்துக் காட்டப்படும். அளவீடுகள் AutocompleteData-இலிருந்து அல்லது, இல்லையெனில், குறிப்பு (hint) இலிருந்து பெறப்படுகின்றன: @[username]... #[channel] போன்ற ஒரு குறிப்பில், @ உடன் தொடங்கும் சொற்கள் மக்கள் அளவீட்டிற்கும், # உடன் தொடங்கும் சொற்கள் சேனல் அளவீட்டிற்கும் செல்கின்றன; அவை எந்த வரிசையில் இருந்தாலும். ... என்பது அந்த அளவீடு மீண்டும் மீண்டும் வரும் என்று குறிக்கிறது, மேலும் கடைசி அளவீடு மீதமுள்ள உரையை ஏற்றுக்கொள்கிறது.

அர்க்குமெண்ட்களில் சேனல்கள்

ஒரு கட்டளையின் அர்க்கமெண்ட்களில, @ மக்களை சிபாரிசு செய்கிறது, # சேனல்களை சிபாரிசு செய்து அவங்களை #channel-name ஆக நிறைவு செய்கிறது, ~ அவங்களை ~channel-name ஆக நிறைவு செய்கிறது. Antimatter-இன் வெப் இன்டர்ஃபேஸ் மற்றும் மொபைல் அப் சேனல் லிங்க்களை # உடன் எழுதுகிறது, ஆக சேனலை எடுக்கற ஒரு கட்டளம் இருவகை ஃபார்ம்களையும் ஏத்துவணும்: இன்-பில்ட் /join, /mute மற்றும் /invite கட்டளங்கள் ஏத்துகிறது, அவங்க ஹிண்ட்ஸ் #[channel] என சொல்கிறது.