Documentation
¶
Index ¶
- Constants
- Variables
- func NewTextGrid(baseAPI, accountSid, authToken string) *textGrid
- type Account
- type AddIncomingPhoneNumberPayload
- type AvailableNumber
- type AvailableNumbers
- type AvailableNumbersSearch
- type Brand
- type BrandAltBusinessIDType
- type BrandEntityType
- type BrandIdentityStatusType
- type BrandRelationship
- type BrandVertical
- type Call
- type CallInitiatePayload
- type CallerName
- type CallerType
- type Campaign
- type Carrier
- type CarrierType
- type CountryCode
- type CreateBrandPayload
- type CreateCampaignPayload
- type IncomingMessage
- type IncomingPhoneNumber
- type Lookup
- type Message
- type MessageSubresourceUri
- type NumberCapabilities
- type NumberLookup
- type OptInStatus
- type OptInStatusAction
- type SecondaryDcaSharingStatus
- type TcrWebhookEventType
- type TcrWebhookPayload
- type TextGrid
- type TextGridTime
- type UseCase
- type WebhookHTTPMethod
Constants ¶
const ( BaseAPI = "https://api.textgrid.com" APIVersion = "2020-01-01" )
Base URL and API version for Lob.
const APISearchLayout = "2006-01-02"
Format expected by TextGrid for searching date ranges. Monitor and other API's offer better date search filters
const TimeLayout = "Mon, 2 Jan 2006 15:04:05 -0700"
The reference time, as it appears in the TextGrid API.
Variables ¶
var Epoch = time.Date(2005, 1, 1, 0, 0, 0, 0, time.UTC)
Epoch is a time that predates the formation of the company (January 1, 2005). Use this for start filters when you don't want to filter old results.
var (
ErrNumberNotFound = errors.New("number not found")
)
var HeatDeath = time.Date(6000, 1, 1, 0, 0, 0, 0, time.UTC)
HeatDeath is a sentinel time that should outdate the extinction of the company. Use this with GetXInRange calls when you don't want to specify an end date. Feel free to adjust this number in the year 5960 or so.
Functions ¶
func NewTextGrid ¶
func NewTextGrid(baseAPI, accountSid, authToken string) *textGrid
NewLob creates an object that can be used to connect to the lob.com API.
Types ¶
type Account ¶
type Account struct { Sid string `json:"sid"` FriendlyName string `json:"friendly_name"` Type string `json:"type"` AuthToken string `json:"auth_token"` WebhookSecret string `json:"webhook_secret"` OwnerAccountSid string `json:"owner_account_sid"` DateCreated TextGridTime `json:"date_created"` DateUpdated TextGridTime `json:"date_updated"` Status string `json:"status"` SubresourceURIs map[string]string `json:"subresource_uris"` URI string `json:"uri"` }
type AddIncomingPhoneNumberPayload ¶
type AddIncomingPhoneNumberPayload struct { PhoneNumber string `url:"phoneNumber"` FriendlyName string `url:"friendlyName,omitempty"` VoiceURL string `url:"voiceUrl,omitempty"` VoiceMethod WebhookHTTPMethod `url:"voiceMethod,omitempty"` VoiceFallbackURL string `url:"voiceFallbackUrl,omitempty"` VoiceFallbackMethod WebhookHTTPMethod `url:"voiceFallbackMethod,omitempty"` SmsURL string `url:"smsUrl,omitempty"` SmsMethod WebhookHTTPMethod `url:"smsMethod,omitempty"` SmsFallbackURL string `url:"smsFallbackUrl,omitempty"` SmsFallbackMethod WebhookHTTPMethod `url:"smsFallbackMethod,omitempty"` StatusCallbackURL string `url:"statusCallback,omitempty"` StatusCallbackMethod WebhookHTTPMethod `url:"statusCallbackMethod,omitempty"` }
type AvailableNumber ¶
type AvailableNumber struct { FriendlyName string `json:"friendly_name"` PhoneNumber string `json:"phone_number"` Lata string `json:"lata"` RateCenter string `json:"rate_center"` Region string `json:"region"` IsoCountry string `json:"iso_country"` Beta bool `json:"beta"` Capabilities NumberCapabilities `json:"capabilities"` }
type AvailableNumbers ¶
type AvailableNumbers struct { AvailablePhoneNumbers []AvailableNumber `json:"available_phone_numbers"` URI string `json:"uri"` }
type AvailableNumbersSearch ¶
type AvailableNumbersSearch struct { PostalCode string `url:"inPostalCode,omitempty"` Region string `url:"inRegion,omitempty"` AreaCode string `url:"areaCode,omitempty"` Contains string `url:"contains,omitempty"` Lata string `url:"inLata,omitempty"` RateCenter string `url:"inRateCenter,omitempty"` }
type Brand ¶
type Brand struct { ID string `json:"brandId"` CspID string `json:"cspId"` AccountSid string `json:"accountSid"` EntityType BrandEntityType `json:"entityType"` FirstName string `json:"firstName"` LastName string `json:"lastName"` DisplayName string `json:"displayName"` CompanyName string `json:"companyName"` Ein string `json:"ein"` EinIssuingCountry string `json:"einIssuingCountry"` Phone string `json:"phone"` MobilePhone string `json:"mobilePhone"` Street string `json:"street"` City string `json:"city"` State string `json:"state"` PostalCode string `json:"postalCode"` Country string `json:"country"` Email string `json:"email"` StockSymbol string `json:"stockSymbol"` StockExchange string `json:"stockExchange"` //TODO: use the enumerated values IPAddress string `json:"ipAddress"` Website string `json:"website"` BrandRelationship BrandRelationship `json:"brandRelationship"` Vertical BrandVertical `json:"vertical"` AltBusinessID string `json:"altBusinessId"` AltBusinessIDType BrandAltBusinessIDType `json:"altBusinessIdType"` UniversalEin string `json:"universalEin"` ReferenceID string `json:"referenceId"` Mock bool `json:"mock"` IdentityStatus BrandIdentityStatusType `json:"identityStatus"` }
type BrandAltBusinessIDType ¶
type BrandAltBusinessIDType string
var ( BrandAltBusinessIDTypeNone BrandAltBusinessIDType = "NONE" BrandAltBusinessIDTypeDUNS BrandAltBusinessIDType = "DUNS" BrandAltBusinessIDTypeGIIN BrandAltBusinessIDType = "GIIN" BrandAltBusinessIDTypeLEI BrandAltBusinessIDType = "LEI" )
type BrandEntityType ¶
type BrandEntityType string
var ( BrandEntityTypePrivateProfit BrandEntityType = "PRIVATE_PROFIT" BrandEntityTypePublicProfit BrandEntityType = "PUBLIC_PROFIT" BrandEntityTypeNonProfit BrandEntityType = "NON_PROFIT" BrandEntityTypeGovernment BrandEntityType = "GOVERNMENT" BrandEntityTypeSoleProprietor BrandEntityType = "SOLE_PROPRIETOR" )
type BrandIdentityStatusType ¶ added in v0.2.0
type BrandIdentityStatusType string
var ( BrandIdentityStatusTypeBlank BrandIdentityStatusType = "" BrandIdentityStatusTypePending BrandIdentityStatusType = "PENDING" BrandIdentityStatusTypeVerified BrandIdentityStatusType = "VERIFIED" BrandIdentityStatusTypeUnverified BrandIdentityStatusType = "UNVERIFIED" )
type BrandRelationship ¶
type BrandRelationship string
var ( BrandRelationshipBasicAccount BrandRelationship = "BASIC_ACCOUNT" BrandRelationshipSmallAccount BrandRelationship = "SMALL_ACCOUNT" BrandRelationshipMediumAccount BrandRelationship = "MEDIUM_ACCOUNT" BrandRelationshipLargeAccount BrandRelationship = "LARGE_ACCOUNT" BrandRelationshipKeyAccount BrandRelationship = "KEY_ACCOUNT" )
type BrandVertical ¶
type BrandVertical string
var ( BrandVerticalProfessional BrandVertical = "PROFESSIONAL" BrandVerticalRealEstate BrandVertical = "REAL_ESTATE" BrandVerticalHealthcare BrandVertical = "HEALTHCARE" BrandVerticalHumanResources BrandVertical = "HUMAN_RESOURCES" BrandVerticalEnergy BrandVertical = "ENERGY" BrandVerticalEntertainment BrandVertical = "ENTERTAINMENT" BrandVerticalRetail BrandVertical = "RETAIL" BrandVerticalTransportation BrandVertical = "TRANSPORTATION" BrandVerticalAgriculture BrandVertical = "AGRICULTURE" BrandVerticalInsurance BrandVertical = "INSURANCE" BrandVerticalPostal BrandVertical = "POSTAL" BrandVerticalEducation BrandVertical = "EDUCATION" BrandVerticalHospitality BrandVertical = "HOSPITALITY" BrandVerticalFinancial BrandVertical = "FINANCIAL" BrandVerticalPolitical BrandVertical = "POLITICAL" BrandVerticalGambling BrandVertical = "GAMBLING" BrandVerticalLegal BrandVertical = "LEGAL" BrandVerticalConstruction BrandVertical = "CONSTRUCTION" BrandVerticalNonProfit BrandVertical = "NGO" BrandVerticalManufacturing BrandVertical = "MANUFACTURING" BrandVerticalGovernment BrandVertical = "GOVERNMENT" BrandVerticalTechnology BrandVertical = "TECHNOLOGY" BrandVerticalCommunication BrandVertical = "COMMUNICATION" )
type Call ¶ added in v0.3.0
type Call struct { Sid string `json:"sid"` DateCreated string `json:"date_created"` DateUpdated string `json:"date_updated"` AccountSid string `json:"account_sid"` Status string `json:"status"` Duration int `json:"duration"` APIVersion string `json:"api_version"` Price string `json:"price"` PriceUnit string `json:"price_unit"` URI string `json:"uri"` From string `json:"from"` To string `json:"to"` QueueTime TextGridTime `json:"queue_time"` Direction string `json:"direction"` StartTime TextGridTime `json:"start_time"` EndTime TextGridTime `json:"end_time"` PhoneNumberSid string `json:"phone_number_sid"` }
type CallInitiatePayload ¶ added in v0.3.0
type CallerName ¶ added in v0.4.0
type CallerName struct { CallerName string `json:"caller_name,omitempty"` CallerType CallerType `json:"caller_type,omitempty"` }
type CallerType ¶ added in v0.4.0
type CallerType string
var ( CallerTypeBlank CallerType = "" CallerTypeConsumer CallerType = "CONSUMER" CallerTypeBusiness CallerType = "BUSINESS" )
type Campaign ¶
type Campaign struct { ID string `json:"campaignId"` AccountSid string `json:"accountSid"` BrandID string `json:"brandId"` CspID string `json:"cspId"` ResellerID string `json:"resellerId"` ReferenceID string `json:"referenceId"` Status string `json:"status"` DateCreated TextGridTime `json:"dateCreated"` BilledDate TextGridTime `json:"billedDate"` AutoRenewal bool `json:"autoRenewal"` Usecase UseCase `json:"usecase"` SubUsecases []UseCase `json:"subUsecases"` Description string `json:"description"` EmbeddedLink bool `json:"embeddedLink"` EmbeddedPhone bool `json:"embeddedPhone"` AffiliateMarketing bool `json:"affiliateMarketing"` NumberPool bool `json:"numberPool"` AgeGated bool `json:"ageGated"` DirectLending bool `json:"directLending"` SubscriberOptin bool `json:"subscriberOptin"` SubscriberOptout bool `json:"subscriberOptout"` SubscriberHelp bool `json:"subscriberHelp"` Sample1 string `json:"sample1,omitempty"` Sample2 string `json:"sample2,omitempty"` Sample3 string `json:"sample3,omitempty"` Sample4 string `json:"sample4,omitempty"` Sample5 string `json:"sample5,omitempty"` MessageFlow string `json:"messageFlow"` HelpKeywords string `json:"helpKeywords"` HelpMessage string `json:"helpMessage"` OptinKeywords string `json:"optinKeywords"` OptinMessage string `json:"optinMessage"` OptoutKeywords string `json:"optoutKeywords"` OptoutMessage string `json:"optoutMessage"` DcaSharingStatus SecondaryDcaSharingStatus `json:"SecondaryDcaSharingStatus"` DcaDeclineReason string `json:"SecondaryDcaDeclineReason"` }
type Carrier ¶ added in v0.4.0
type Carrier struct { MobileCountryCode string `json:"mobile_country_code,omitempty"` MobileNetworkCode string `json:"mobile_network_code,omitempty"` Name string `json:"name,omitempty"` Type CarrierType `json:"type,omitempty"` }
type CarrierType ¶ added in v0.4.0
type CarrierType string
var ( CarrierTypeBlank CarrierType = "" CarrierTypeLandline CarrierType = "landline" CarrierTypeMobile CarrierType = "mobile" CarrierTypeVoip CarrierType = "voip" )
type CountryCode ¶
type CountryCode string
CountryCode represents one of two country short codes, US and CA
var ( CountryCodeUnitedStates CountryCode = "US" CountryCodeCanada CountryCode = "CA" )
type CreateBrandPayload ¶
type CreateBrandPayload struct { EntityType BrandEntityType `json:"entityType"` FirstName string `json:"firstName,omitempty"` LastName string `json:"lastName,omitempty"` DisplayName string `json:"displayName,omitempty"` CompanyName string `json:"companyName,omitempty"` Ein string `json:"ein,omitempty"` EinIssuingCountry string `json:"einIssuingCountry,omitempty"` Phone string `json:"phone,omitempty"` MobilePhone string `json:"mobilePhone,omitempty"` Street string `json:"street,omitempty"` City string `json:"city,omitempty"` State string `json:"state,omitempty"` PostalCode string `json:"postalCode,omitempty"` Country string `json:"country,omitempty"` Email string `json:"email,omitempty"` StockSymbol string `json:"stockSymbol,omitempty"` StockExchange string `json:"stockExchange,omitempty"` //TODO: use the enumerated values IPAddress string `json:"ipAddress,omitempty"` Website string `json:"website,omitempty"` BrandRelationship BrandRelationship `json:"brandRelationship,omitempty"` Vertical BrandVertical `json:"vertical,omitempty"` AltBusinessID string `json:"altBusinessId,omitempty"` AltBusinessIDType BrandAltBusinessIDType `json:"altBusinessIdType,omitempty"` ReferenceID string `json:"referenceId,omitempty"` Mock bool `json:"mock"` }
type CreateCampaignPayload ¶
type CreateCampaignPayload struct { BrandID string `json:"brandId"` Usecase UseCase `json:"usecase"` SubUsecases []UseCase `json:"subUsecases"` Description string `json:"description"` EmbeddedLink bool `json:"embeddedLink"` EmbeddedPhone bool `json:"embeddedPhone"` NumberPool bool `json:"numberPool"` AgeGated bool `json:"ageGated"` DirectLending bool `json:"directLending"` SubscriberOptin bool `json:"subscriberOptin"` SubscriberOptout bool `json:"subscriberOptout"` SubscriberHelp bool `json:"subscriberHelp"` Sample1 string `json:"sample1,omitempty"` Sample2 string `json:"sample2,omitempty"` Sample3 string `json:"sample3,omitempty"` Sample4 string `json:"sample4,omitempty"` Sample5 string `json:"sample5,omitempty"` MessageFlow string `json:"messageFlow,omitempty"` HelpKeywords string `json:"helpKeywords,omitempty"` HelpMessage string `json:"helpMessage,omitempty"` OptinKeywords string `json:"optinKeywords,omitempty"` OptinMessage string `json:"optinMessage,omitempty"` OptoutKeywords string `json:"optoutKeywords,omitempty"` OptoutMessage string `json:"optoutMessage,omitempty"` ReferenceID string `json:"referenceId,omitempty"` AutoRenewal bool `json:"autoRenewal"` AffiliateMarketing bool `json:"affiliateMarketing"` }
type IncomingMessage ¶
type IncomingMessage struct { AccountSID string `form:"AccountSid"` APIVersion string `form:"ApiVersion"` Body string `form:"Body"` From string `form:"From"` MessageSID string `form:"MessageSid"` NumberOfMedia int `form:"NumMedia"` NumberOfSegments int `form:"NumSegments"` MediaUrl0 string `form:"MediaUrl0"` MediaContentType0 string `form:"MediaContentType0"` MediaUrl1 string `form:"MediaUrl1"` MediaContentType1 string `form:"MediaContentType1"` MediaUrl2 string `form:"MediaUrl2"` MediaContentType2 string `form:"MediaContentType2"` MediaUrl3 string `form:"MediaUrl3"` MediaContentType3 string `form:"MediaContentType3"` SmsMessageSid string `form:"SmsMessageSid"` SmsSID string `form:"SmsSid"` SmsStatus string `form:"SmsStatus"` To string `form:"To"` }
type IncomingPhoneNumber ¶
type IncomingPhoneNumber struct { ID string `json:"sid"` AccountSid string `json:"account_sid"` FriendlyName string `json:"friendly_name"` PhoneNumber string `json:"phone_number"` VoiceURL string `json:"voice_url"` VoiceMethod string `json:"voice_method"` VoiceFallbackURL string `json:"voice_fallback_url"` VoiceFallbackMethod string `json:"voice_fallback_method"` DateCreated string `json:"date_created"` DateUpdated string `json:"date_updated"` SmsURL string `json:"sms_url"` SmsMethod string `json:"sms_method"` SmsFallbackURL string `json:"sms_fallback_url"` SmsFallbackMethod string `json:"sms_fallback_method"` Beta bool `json:"beta"` Capabilities NumberCapabilities `json:"capabilities"` StatusCallback string `json:"status_callback"` StatusCallbackMethod string `json:"status_callback_method"` APIVersion string `json:"api_version"` URI string `json:"uri"` Status string `json:"status"` }
type Lookup ¶ added in v0.4.0
type Lookup struct { CallerName *CallerName `json:"caller_name,omitempty"` CountryCode string `json:"country_code,omitempty"` PhoneNumber string `json:"phone_number,omitempty"` NationalFormat string `json:"national_format,omitempty"` Carrier *Carrier `json:"carrier,omitempty"` URL string `json:"url,omitempty"` }
type Message ¶ added in v0.6.0
type Message struct { AccountSID string `json:"account_sid"` SID string `json:"sid"` Body string `json:"body"` From string `json:"from"` To string `json:"to"` Status string `json:"status"` Direction string `json:"direction"` Price string `json:"price"` Surcharge string `json:"surcharge"` PriceUnit string `json:"price_unit"` NumSegments string `json:"num_segments"` NumMedia string `json:"num_media"` Email bool `json:"email"` DateCreated TextGridTime `json:"date_created"` DateSent TextGridTime `json:"date_sent"` DateUpdated TextGridTime `json:"date_updated"` CarrierNetwork string `json:"carrierNetwork"` MessageClass string `json:"messageClass"` APIVersion string `json:"api_version"` URI string `json:"uri"` SubresourceUris MessageSubresourceUri `json:"subresource_uris"` }
type MessageSubresourceUri ¶ added in v0.6.0
type MessageSubresourceUri struct {
Media string `json:"media"`
}
type NumberCapabilities ¶
type NumberLookup ¶ added in v0.4.0
type OptInStatus ¶ added in v0.8.0
type OptInStatus struct { Action OptInStatusAction `json:"action"` Date string `json:"date,omitempty"` Verb string `json:"verb,omitempty"` }
type OptInStatusAction ¶ added in v0.8.0
type OptInStatusAction string
OptInStatusAction is the action that was taken. Either optedin, optedout, or nothing
var ( OptInStatusActionOptedOut OptInStatusAction = "optedout" OptInStatusActionOptedIn OptInStatusAction = "optedin" OptInStatusActionNothing OptInStatusAction = "nothing" )
type SecondaryDcaSharingStatus ¶ added in v0.2.3
type SecondaryDcaSharingStatus string
var ( SecondaryDcaSharingStatusBlank SecondaryDcaSharingStatus = "" SecondaryDcaSharingStatusPending SecondaryDcaSharingStatus = "PENDING" SecondaryDcaSharingStatusAccepted SecondaryDcaSharingStatus = "ACCEPTED" SecondaryDcaSharingStatusDeclined SecondaryDcaSharingStatus = "DECLINED" )
type TcrWebhookEventType ¶ added in v0.2.0
type TcrWebhookEventType string
var ( TcrWebhookEventTypeBrandIdentityStatusUpdate TcrWebhookEventType = "BRAND_IDENTITY_STATUS_UPDATE" TcrWebhookEventTypeBrandDelete TcrWebhookEventType = "BRAND_DELETE" TcrWebhookEventTypeCampaignDCAComplete TcrWebhookEventType = "CAMPAIGN_DCA_COMPLETE" TcrWebhookEventTypeCampaignBilled TcrWebhookEventType = "CAMPAIGN_BILLED" TcrWebhookEventTypeCampaignExpired TcrWebhookEventType = "CAMPAIGN_EXPIRED" )
type TcrWebhookPayload ¶ added in v0.2.0
type TcrWebhookPayload struct { EventType TcrWebhookEventType `json:"eventType"` CspID string `json:"cspId"` CspName string `json:"cspName"` BrandName string `json:"brandName"` BrandReferenceID any `json:"brandReferenceId"` BrandID string `json:"brandId"` BrandIdentityStatus BrandIdentityStatusType `json:"brandIdentityStatus"` CampaignID string `json:"campaignId"` CampaignReferenceID string `json:"campaignReferenceId"` Description string `json:"description"` Mock bool `json:"mock"` }
type TextGrid ¶
type TextGrid interface { CreateAccount(data url.Values) (*Account, error) CreateBrand(brand CreateBrandPayload) (*Brand, error) GetBrand(id string) (*Brand, error) DeleteBrand(id string) error CreateCampaign(payload CreateCampaignPayload) (*Campaign, error) GetCampaigns() ([]Campaign, error) GetCampaign(id string) (*Campaign, error) DeactivateCampaign(id string) error AttachNumberToCampaign(id, numberID string) error GetCall(id string) (*Call, error) InitiateCall(call CallInitiatePayload) (*Call, error) GetMessage(id string) (*Message, error) ListAvailablePhoneNumbers(countryCode CountryCode, search AvailableNumbersSearch) (*AvailableNumbers, error) AddIncomingPhoneNumber(payload AddIncomingPhoneNumberPayload) (*IncomingPhoneNumber, error) GetOptInStatus(to, from string) (*OptInStatus, error) Lookups() NumberLookup }
type TextGridTime ¶
TextGridTime can parse a timestamp returned in the TextGrid API and turn it into a valid Go Time struct.
func NewTextGridTime ¶
func NewTextGridTime(val string) *TextGridTime
NewTextGridTime returns a TextGridTime instance. val should be formatted using the TimeLayout.
func (TextGridTime) MarshalJSON ¶
func (t TextGridTime) MarshalJSON() ([]byte, error)
func (*TextGridTime) UnmarshalJSON ¶
func (t *TextGridTime) UnmarshalJSON(b []byte) error
type UseCase ¶
type UseCase string
var ( UseCase2FA UseCase = "2FA" UseCaseAccountNotification UseCase = "ACCOUNT_NOTIFICATION" UseCaseAgentsFranchises UseCase = "AGENTS_FRANCHISES" UseCaseCarrierExempt UseCase = "CARRIER_EXEMPT" UseCaseCharity UseCase = "CHARITY" UseCaseCustomerCare UseCase = "CUSTOMER_CARE" UseCaseDeliveryNotification UseCase = "DELIVERY_NOTIFICATION" UseCaseEmergency UseCase = "EMERGENCY" UseCaseFraudAlert UseCase = "FRAUD_ALERT" UseCaseHigherEducation UseCase = "HIGHER_EDUCATION" UseCaseK12Education UseCase = "K12_EDUCATION" UseCaseLowVolume UseCase = "LOW_VOLUME" UseCaseM2M UseCase = "M2M" UseCaseMarketing UseCase = "MARKETING" UseCaseMixed UseCase = "MIXED" UseCasePolitical UseCase = "POLITICAL" UseCasePollingVoting UseCase = "POLLING_VOTING" UseCaseProxy UseCase = "PROXY" UseCasePublicServiceAnnouncement UseCase = "PUBLIC_SERVICE_ANNOUNCEMENT" UseCaseSecurityAlert UseCase = "SECURITY_ALERT" UseCaseSocial UseCase = "SOCIAL" UseCaseSoleProprietor UseCase = "SOLE_PROPRIETOR" UseCaseSweepstake UseCase = "SWEEPSTAKE" UseCaseTrial UseCase = "TRIAL" UseCaseUcaasHigh UseCase = "UCAAS_HIGH" UseCaseUcaasLow UseCase = "UCAAS_LOW" )
type WebhookHTTPMethod ¶
type WebhookHTTPMethod string
WebhookMethod is the http method which should be used for the request to the webhook endpoint
var ( WebhookHTTPMethodGet WebhookHTTPMethod = "GET" WebhookHTTPMethodPost WebhookHTTPMethod = "POST" )