DIRECT RESPONSE E-MAIL

Abstract: An e-mail message [10] is analyzed to derive response information concerning a commercial transaction. Based on the derived information, commercial transaction data are automatically generated in a format that is usable to complete the transaction.

Description: DIRECT RESPONSE E-MAIL Field of invention This invention relates to direct response e-mail. Background of the Invention In direct response e-mail, a vendor, for example, can sell a product to a customer by sending an e-mail message to the customer that describes the product and its price. The customer can order the product by returning an e-mail (sometimes called a direct response e-mail) that gives appropriate order information. The vendor can confirm the order by a return e-mail. The order information returned by the customer can sometimes be determined automatically using software that analyses the customer's reply e-mail. Summary of the Invention In general, in one aspect of the invention, an e- mail message is analyzed to derive response information concerning a commercial transaction. Based on the derived information, commercial transaction data are automatically generated in a format that is usable to automatically complete the commercial transaction. In general, in another aspect of the invention, an e-mail message is sent to a customer offering a product or service for sale. The e-mail message includes locations for response by the customer to indicate his intention to order the product or service. The customer returns an e-mail message that includes the response. Based on the received e-mail, order information is automatically generated in a format usable automatically by an order fulfillment system to cause the order to be filled. In general, another aspect of the invention includes automatically identifying response information which requires resolution of an issue with the source of the e- mail message and automatically managing an e-mail dialog with the source to resolve the issue. In general, in another aspect, the invention features automatically sorting e-mail messages, based on response information contained in the messages, into e-mail messages that can be processed automatically to generate commercial transactions, e-mail messages in which the response information is inadequate to permit generation of commercial transactions, and e-mail messages that may be subjected to exception handling to yield information that is sufficient to generate commercial transactions. In general, in another aspect, the invention features automatically generating a confirmatory e-mail message to the source of the e-mail message confirming that a commercial transaction has been or will be completed. In general, in another aspect, the invention features receiving inbound e-mail messages that result from corresponding outbound e-mail messages associated with a marketing program, the inbound messages containing response information, each of the outbound messages being associated with a distinct piece of the marketing program. The response information in each of the inbound messages is automatically associated with the corresponding distinct piece of the marketing program. In general, in another aspect, the invention features automatically merging response information with corresponding information in a database for use in completing transactions. In general, in another aspect, the invention features identifying inbound e-mail messages that cannot be processed automatically to generate commercial transactions, and using the database information to assist in exception handling of the identified inbound messages. Other advantages and features will become apparent from the following description and from the claims. Brief Description of the Drawing Figures 1A through 1C and 2A through 2B show e-mail messages . Figure 3 is a block diagram of a direct response e- mail system. Description of the Preferred Embodiments Outbound e-mail messages The two e-mail messages shown in figures 1A through 1C and 2A through 2B are examples of outbound messages associated with commercial transactions. The example message 10 shown in figure 1 offers Harvard Business Review products. Message 10 includes basic copy 12 that is similar to basic direct marketing copy of the kind that is commonly used in e-mail marketing. Message 10 also contains a section 14 giving instructions on how to order the products. Inbound e-mail messages To take advantage of the offer shown in figure 1, the recipient creates a reply e-mail message (the direct response message) and types the letters of the items that he wants to order in the first line of the body of the message. In other examples, the letters could be typed in the subject line or the last line of the body of the message. The user is also asked to correct and complete shipping and e-mail address information that has been merged into the outbound e-mail message in a section 16. In section 16, each of the entries is bounded by brackets. Another section could contain merged billing information, not shown. The person who replies to the e-mail (the customer) is meant to include the corrections or additions within the indicated brackets. By allowing the recipient to take advantage of the offer simply by replying to the e-mail, rather than requiring the recipient to place an order by linking to a related web-site or to print the e-mail message and FAX it back, or to call an 800 number, a much higher return rate can be achieved. For conventional outbound e-mail messages that require the recipient to click on an embedded URL to go to a web site, the returns may be on the order of several hundred percent on investment (the fee charged for delivering the outbound messages) . By enabling the recipient to provide direct response e-mail messages as in figure 1, the return on investment can be as high as several thousand percent . Figures 2A and 2B illustrate a similar outbound e- mail message in which there is no choice of products but only a single offer to be accepted or rejected. To take advantage of the offer, the recipient types "yes" in the subject line. In figure 2B, a shipping block 18 of the kind mentioned above is shown. (In this case, the shipping block contains no information because the shipping address is the same as the billing address.) One reason for including differential billing and shipping blocks is to acquire information in the return e- mail message that is similar to information captured in orders placed on a related web site. In a system in which web-site orders generate fields that can be fed directly to an automated order fulfillment process, it is useful to make the e-mail message information field-wise consistent to permit the information to be delivered automatically to the same order fulfillment process. Exception processing Processing the inbound e-mails (the ones with responses concerning commercial transactions from the recipients of the outbound e-mails) may require custom interaction with the recipients. For example, the wording of the outbound messages may be confusing to the recipients. As shown in figure 3, the system 40 enables the transactional e-mail message processor 42 to determine when a dialog with the recipient 44 is needed and then assists a human service representative 46 to conduct an effective dialog 48. The dialog can be conducted on behalf of the vendor 50 but without involving the vendor. Alternatively, the vendor's fulfillment process 52 can be notified electronically 54 of interaction that may be required. Easing the processing of responses that include customer orders is important because the orders typically come back quickly, e.g., within 36-48 hours, and in large volume. The ability to deal with questions that arise as a result of the contact from a customer service point of view keeps the vendor's customer service organization from being overwhelmed by the responses that come back. The ability to process exceptions without involving the customer service organization of the vendor is based partly on knowing how the outbound e-mail messages were constructed. As a simple example, a recipient may ask an unnecessary question that could have been answered by reading the outbound e-mail message. The e-mail message processor can pull out the relevant portion of the message and send it back to the recipient to answer the question. ProcOrder Process The inbound e-mail messages 60 are batch processed by a script called ProcOrder 62. ProcOrder parses the elements of the inbound e-mail messages in accordance with the original set up and instructions of the outbound e-mail messages 64. ProcOrder determines if all of the items that are required for an order to be completely processed automatically appear in the inbound e-mail message. For example, the script would look for the ordering token, such as the word "yes" or a series of letters depending on whether it is a single or multiple offer. The script would also look for footer information in the e-mail, message, including a code that identifies the given campaign and the given offer, as seen in block 66 of figure 2B. In that example, there are four components in the footer, but only two are represented because the other two are not required in this instance. The first element is a customer identifier 68, e.g. 861270. Then there is a space 70 between two pipes that would contain the list identifier if there were one. There may be multiple recipient lists for a given marketing campaign. In the example, there is only one list, and there is no list identifier. A list number 243 might refer to a list of people who made a purchase at the vendor's web site or who subscribed at the web-site for a listserv. The third footer item could be a source of awareness code 72, e.g., 3275, which identifies a particular marketing campaign. For example, in the case of figure 2, the code could refer to a Benchmarking Three-part Video Series offer. The last item in the footer, located between the final pipe and the first right bracket would be a flight identification code 74. A given campaign could have multiple flights of e-mail messages. After looking for the footer information, the ProcOrder parser looks for fields in the billing and shipping address blocks that are required to complete the order. What is required may vary with the type of campaign but typically the minimum requirements are a name and a physical address. If the information is not completely available in the response e-mail message, the script checks to see if it is available in the database 76. If not available in either place, the script generates an exception entry for an exception list. The exception list is provided to a service representative 46 who can then act on it (without involving the vendor's customer service organization), e.g., by sending back an e-mail message asking for the shipping address . If all required information is available, the script generates a fully fielded valid order in a format required by the fulfillment system of the vendor and adds it to a batch of valid orders 78 which are sent electronically to the fulfillment process. Confirmation e-mail message As a result of running the ProcOrder script, an e- mail message 80 is returned to each customer either to confirm an order or to request more information. In the latter case, a dialog ensues and is managed by software and through an exception handling service as explained earlier. For example, the customer's response could say something like "sure, send"; or "send it and I'll take a look." Shortly thereafter the customer would receive a confirmation "Thank you for your order; you can expect the CD-ROM in about seven business days. Please let us know if there is anything else we can do to help simply by replying to this e-mail . " One -click ordering Another feature of the e-mail dialog with a customer involves simplifying and optimizing the presentation of content. In the examples of figures 1 and 2, the information is presented in a simple text format. It is useful also to provide in-line HTML code in the outbound e- mail message in a manner similar to the one-click ordering that Amazon.com offers in a web-site context. In one-click ordering, the customer sets up an account by providing credit card and shipping information. On subsequent visits to the web site, the customer can pick a product with one click, place an order, and have it shipped. A. similar technique could be adapted to e-mail message interchange by embedding one-click ordering into e-mail. An advantage of in-line HTML code is the opportunity for a much higher response rate because of the higher graphical contact and higher level of engagement normally achieved by a graphical message. Template The outbound e-mail messages are set up in a standard format using templates 90. The templates enable either a single-offer message or a multiple-offer message. Other templates are also possible, including one that embeds in-line HTML into the message as mentioned above, either for the single-offer or multiple-offer cases. In addition, a set-up tool 92 permits the parameters of a given campaign to be defined, including the source of awareness code, the flight identification code, the campaign identification code, and similar information. The set-up tool also permits defining the tokens that are to be used in a given campaign (for example, the letters assigned to different products being offered) . The set-up tool also allows a definition of the required fields that must appear in a given campaign to enable automated generation of orders to an existing fulfillment system. The set-up tool also provides a user interface that enables a vendor to help in entering the set-up information. The result of applying the tool to the templates is a set of outbound message forms 94 that are ready for use. Reporting tool After the template is set up and the system is ready to launch a flight, address 108 and other information 110. 112 stored in the target list of customers is merged with the message forms, and the e-mail messages are automatically generated and sent by an outbound e-mail delivery engine 96. Customers then begin to respond. The ProcOrder script generates automatic orders to the fulfillment system and exception information for additional processing. A reporting tool 104 aggregates- information about the responses for a given campaign according to source of awareness code and flight. The information is made available on-line to the vendor and can be used for a variety of marketing purposes. The information could be generated as an Excel file attached to an e-mail, or as a paper-based report, or as an electronic file that is transferred on a batch basis. Gathering additional information from database There may be an intermediate step between the parsing engine's (ProcOrder) extraction of information from an e-mail message and the generation of the valid order. The intermediate step could be a querying process 112 to gather additional information from an existing database. The additional information may not have been included in the outbound e-mail messages but may be needed to generate a valid order. For example, product codes 112 may be stored in the database but not included in the outbound e-mail message. The letters entered by the customer can be mapped to the actual product codes by reference to the tables of the database based upon the source of awareness code. The resulting valid order is a fully-fielded record that has the fields required by the client's order fulfillment system to process an order. Exception treatment Exception handling can be treated in different ways depending on the circumstances. For example, an exception might occur when a customer responds from an e-mail client that does not quote the original text of the outbound e-mail message. The inbound e-mail message then has the customer's e-mail address, a subject line that says "yes", and the original subject line from the campaign, but does not have the required information for the shipping address or the footer information. ProcOrder would kick that out as an exception, but the exception handling system would allow a response management representative 46, based on the e-mail address, to confirm, from the database 76, that all of the required information is available. Use of the subject line allows the system to tie back to the appropriate campaign and to figure out who is ordering and what he is ordering. A valid order can be created without further interaction with the customer other than to send him a confirmation that the system has been able to enter a valid order on his behalf. The system thus recognizes that it is not likely to be possible to automate every interaction with the customer, but it may be possible to complete a dialog with essentially all of the customers from whom inbound e-mail messages are received by automatically identifying messages that will require custom human handling and providing information and tools that enable the human handlers to complete the exception transactions in an efficient manner. Non-order response processing Not every inbound e-mail message is an order. Non- order messages include undeliverable bounced messages to ad hoc customer service responses. Non-order inbound e-mail messages must be identified by the parsing engine. Undeliverable e-mail messages 114 are automatically separated from the inbound e-mail stream and stored for offline handling by a human response handling professional, who operates a script on the files of undeliverable messages. The script classifies them as "soft" and "hard," parses e-mail addresses and footer data from the messages, matches the parsed records to the database, and flags appropriate records as "undeliverable". Other non-order messages also are handled manually as explained earlier. Vendor creation of e-mail campaigns. A campaign creation tool 126 is provided to a vendor to enable simple entry of all information needed to create an e-mail campaign, including all the parameters, the text of the messages, and the tables of data needed in the database. The vendor delivers the campaign electronically to the transactional e-mail processor which then delivers the e-mail messages, receive the responses, processes all exceptions, and returns to the fulfillment system the vendor orders in a proper format . A web-based vendor interface 128 enables on-line viewing by the vendor of the status of all campaigns, including the state of those that are in development and the results of those that are "live". The information is hosted by the transactional e-mail processor in part based on the database 76. The interface also gives the vendor a mechanism to check text and other content into the database. Alternatively, instead of automatically permitting the vendor to fully create a finished campaign, the vendor may be enabled to download and check into the database a proposed campaign. Then an account executive of the e-mail handler process would review it and work with the vendor to complete it before it is finally queued for distribution. Appendices A, B, and C contain more detailed descriptions of aspects of implementations of the invention. Appendix D contains source code written of an example of the ProcOrder process . Other implementations are within the scope of the following claims. What is claimed is: e-mail Protocols, Structures, Definitions & Cycles MAIL CAMPAIGN A mail campaign is defined in terms of Flights. Flight- 1 FU F ght-2 FU Fhght-n FU A flight contains one or more items that are being promoted but is not restricted to the manner in which the promotion is performed. A flight could be setup to promote a CD-ROM but has variances in the promotion of the item to the targeted mailing. These variances in a flight are called Tests. Flιεht-1 Testl Test2 Test3 Test4 Testi cd-rom cd-rom cd-rom cd-rom cd-rom $5off $0off SlOoff free coupon Fheht-1 FU TestFUl TestFU2 TestFU3 TestFU4 TestFU5 cd-rom cd-rom cd-rom cd-rom cd-rom $5off SOoff SlOoff free coupon In order to reference the entities above, each are assigned Ids as follows: APPENDIX A A Campaign Has a Campaign ID , CID - Has 1 to n flights and flight follow-ups A Mailing - Has a Mailing ID, MID - Has a Client Code (SOAC). The mailing is performed on behalf of the client. - Has a Flight ID, FID and a Flight Follow-up ID, FID A Flight - Has a flight ID, FID Shares a SOAC with its Flight Follow-up Contains one or more Test Ids, TID Has 1 to m items for sale An Item - Has an Item ID IID Has an Item code (determined by the client) To summarize, the following ID acronyms are used: - MID - Member ID (ID of the person receiving the e-mail) - CID - Campaign ID LID - maiLing ID - FID - Flight ID - TID - Test ID - IID - Item ID - SID - Style ID (ID of the style of the e-mail message) MAIL PROTOCOLS SMTP The Simple Mail Transfer Protocol (SMTP) is described in RFC 821 and is the way that two sites on the Internet exchange mail messages. The commands are: HELO domain - MAIL FROM: username RCPT TO: username - DATA - QUIT Each command is terminated with a CR-LF pair. Replies start with a three-digit response code and continue with text designed to be read by users. POP3 POP3 is the Post Office Protocol. If the site is always on the Internet, then mail would be sent with an SMTP-sender and received with an SMTP-receiver. However, it may cases it is not possible to maintain a permanent internet connection and in such cases, the Post Office Protocol is used to receive the inbound mail. POP3 allows mail to be stored on machine that is always on the Internet and a receiving host connects to it, asks for any mail and disconnects. The commands are: USER username PASS password STAT LIST [message number] RETR message number DEL message number LAST QUIT THE ANATOMY OF AN OUTBOUND E-MAIL MESSAGE An outbound email message has a predefined structure. The message is created by combining together a text block with an email address. The structure of an outbound mail message consists of a Property, Address, Subject, Header, Body, Personal and Token. Headers Address Subject Salutation Body Personal Token Structure of an outbound e-mail message a) Headers The first few lines of an Outbound Mail message are called the Headers and have a defined format. This information is not normally displayed to the User by a Mail Client application and can only be viewed if the Client permits e.g., in Microsoft Exchange this information can be viewed by listing the properties of a mail message as follows: Received: by mail.kersur.net (mbox peterk) (with Cubic Circle's cucipop (vl.31 1998/05/13) Fri Mar 19 2 0:59:00 1999) X-From_: aestes@e-dialog.com Fri Mar 19 13:43:54 1999 Return-Path: <aestes@e-dialog .com> Received: from montana.e-dialog.com (mail.e-dialog.com [ 07.31.244.2] ) by mail.kersur.net (8.9.1/8.9.1) with ESMTP id NAA10659 for <peterk@sytech.com>; Fri, 19 Mar 1999 13:43:53 -0500 (EST) Received: by MONTANA with Internet Mail Service (5.5.2448.0) id <GZZPKKZ2>; Fri, 19 Mar 1999 13:43:57 -0500 Message-ID: <B15DC0490C8AD211BDFD004005A0C2CC47F10B@MONTANA> From: Anthony Estes <aestes@e-dιalog.com> To: "'peterk@sytech.com'" <peterk@sytech.com> Subject: F : Warning: could not send message for past 4 hours Date: Fri, 19 Mar 1999 13:43:54 -0500 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2448.0) Content-Type: multipart/mixed; boundary=" _=_NextPart_000_01BE7238.71C0EB9A" This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. _=_NextPart_000_01BE7238.71C0EB9A Content-Type: text/plain; charset="ιso-8859-l" _=_NextPart_000_01BE7238.71C0EB9A Content-Type: application/octet-stream; name="ATT00547.TXT" Content-Disposition: attachment; fιlename="ATT00547.TXT" _=_NextPart_000_01BE7238 71C0EB9A Content-Type message/r c822 Message-ID <B15DC0490C8AD211BDFD004005A0C2CC47EFF2@MONTANA> From Anthony Estes <aestes@e-dιalog com> To Hillary Gaeth (E-mail) <HGaeth@engage com> Subject * Thurs, Fri ' Date Tue, 9 Mar 1999 08 04 20 -0500 MIME-Version 1 0 X-Mailer Internet Mail Service (5 5 2448 0) Content-Type text/plain _=_NextPart_000_01BE7238 71C0EB9A- A header starts with afield name followed by a colon and the field body The contents of the field body may be rigidly defined or free form The following headers are mandatory, that is, there must be a header with each of these names - Date - From, or Sender and From - To. or CC (carbon copy), BCC (blind carbon copy) The following headers are optional - Return-path Received - Reply-To Message-ID In-Reply-To References Keywords Subject Comments Encrypted Some of these headers are obscure and rarely used In addition, some mail clients generate their own extra headers Many such extra header start with the characters "X-" because if extra mail headers are added to the RFC they will never start with these characters A header may be split over two lines according to the following rules - The split must be at a place where whιtespace(blank or tabs) would normally occur, for example, not in the middle of a username or similar field. - The continuation line must start with a space or tab. Similary, a header can have extra white spaces almost everywhere except in the middle of a field Two headers that are given special attention in the context of this document are those that contain the address and subject b) Address The address is a header that contains the email address of the person receiving the message c) Subject This is a header that describes the subject of the mail. Contained in the subject is a Subject Token in the form of two characters. For example, for the mail subject '** A Special Offer for Selected Managers', the Subject Token is ** The Subject Token is chosen to identify the Test ID of the mail message. d) Salutation The salutation is a text block in the outbound mail message that is personalized to the person receiving the message. The intention is to provide a personalized greeting and an indication of the sender. From Harvard Business School Publishing <hbsp@e-care. com> To ' esalas@protelsa com pe ' Subject ** A Special Offer for Selected Manager Date Tuesday, July 14 1998 6 47 PM From the Desk of Laura Winig Harvard Business School Publishing Corporation Boston, Massachusetts Tuesday, July 14 , 1998 Ms Elizabeth Salas 5700 Collins Avenue Apt 6h Miami Beach, FL 33140-2308 Dear Ms Salas . The information in italic is personalized and is combined with the remainder of the message at the time of dispatch. e) Body The body contains the main core of the message. The format and layout is fixed and not personalized for a particular test. Simply type "YES ' in your reply to this e-mail to take "Virtual Work Real Results for a No- Obligation Test Drive 1 Do you work with colleagues and clients in multiple locations' Communicate more by email and conference calls than through meetings' Find your "office 1 is wherever you are at any given moment' Then you're working virtually" and you know that working effectively without proximity is essential m today's workplace And you know it's not as easy as it looks. Here at the publishing arm of Harvard Business School, we've combined extensive research and real-life examples to create "Virtual Work: Real Results' -a dynamic multimedia program that can improve your effectiveness working "virtually. " Use this engaging tool and you'll understand- * the dynamics and politics of working virtually- and how to handle tough situations when you can't be face-to- ace; * how to most effectively use email, video conferencing, voice conferencmg-and how to overcome fear of technology; * ways to build relationships and trust without "human touch" - and how a virtual team can work efficiently and seamlessly. We bring you tricks of tne trade from the experts in working virtually Then, you gain confidence using these techniques through an interactive case study where you lead a virtual team through a project. You'll make decisions that determine the success of its efforts-all m a realistic, but no-risk, environment. Overcome the isolation and conflicting loyalties that are inherent in working in a virtual environment-and get ready for success with "Virtual Work- Real Results Take "Virtual Work: Real Results" for a No-Obligation Test Drive. Simply reply to this email and we'll send you the program with our compliments. We're confident you'll find you're working more effectively in the virtual world. After 14 days, we'll send you an invoice for just $295 (single user license) . But remember, if you're not entirely pleased with the program, simply call us and we'll arrange to pick it up. You will owe nothing. Sincerely, Laura Winig Director In the above example the response with a "YES" is sufficient to indicate the purchase of the single product on offer. In a multi-product offer, the items would be listed and associated with a letter. For this type of mailing, the responder would list the letters in the response. A mailing may have a follow up 'reminder' flight. This reminder would not go to respondents of the original flight. For example: On Wednesday, July 1, I sent you a special offer on "Virtual Work: Real Results": a new interactive CD-ROM from Harvard Business School Publishing. Since I haven't heard back from you, I wanted to send you a reminder Before the offer expires If you are simply not interested, I apologize for the intrusion. = BELOW IS A REPRINT OF THIS SPECIAL OFFER = Simply type "YES" in your reply to this e-mail to take "Virtual Work: Real Results" for a No- Obligation Test Drive 1 Do you work with colleagues and clients in multiple locations' Communicate more by email and conference calls than through meetings' Find your "office" is wherever you are at any given moment' Then you're working "virtually" and you know that working confident you'll find you're working more effectively in the virtual world After 14 days, we'll send you an invoice for just $295 (single user license) . But remember, if you're not entirely pleased with the program, simply call us and we'll arrange to pick it up You will owe nothing. Sincerely, Laura Winig Director f) Personal The personal is added to the outbound message, after the mail body. The purpose of the text block is to request personal details from the respondent. The information requested is presented in two columns, the first indicating the type of information required and the second as a place for the reply to be entered (in [..]). For example, FIRST NAME: LAST NAME: TITLE: COMPANY : DEPARTMENT : ADDRESS1: ADDRESS2 : ADDRESS3 : CITY: PROVINCE/STATE: POSTAL/ ZIP CODE COUNTRY : PHONE : FAX: EMAIL: These details are to determine the shipping and billing information. e) Token The token follows the Mail Body (or Mail Personal if applicable) and contains information about the mailing and also the addressee e.g., [ [ 878119 12815 1 1 ] ] The format of a Mail Token is [[MID I TID I SID]] where MID is an membership ID assigned to the person receiving the outbound message - TID is the test ID assigned to the outbound message. This would be related to the Subject Token. SID is the style ID assigned to the style of the mailing i.e., single product or multi-product. These three pieces of information uniquely identify the receiver of the outbound message and also the information they received. Hence, the processing of a response is greatly simplified if the reply returns the mail token. In summary, an outbound message contains generic information that is the same in all the mailings of a test, and also personalized: Generic Personalized Subject Header Body Address Salutation Personal Token THE ANATOMY OF AN INBOUND E-MAIL MESSAGE An inbound email message has a predefined structure. However, the structure may not be 'structured' sufficiently for it to be automatically processed. Header Address Subject Response a) Headers The first few lines of an Inbound Mail message are Headers and have a defined format. This information is similar in format to that of the outbound message. If the response is produced by replying to an outbound message, (instead of creating it from scratch) then it is probable that the headers of the outbound will be in the inbound mail. b) Address The address is a header that contains the email address of the respondent. c) Subject This is a header that describes the subject of the mail. This is free-form text and no assumptions can be on its structure. It may be the subject that was used in the outbound mail. d) Response The response is a text block containing the message from the respondent. It should not be assumed that the response has any structure since a responder has the freedom to write a reply in "free format" and is not forced to a guideline. This creates a number of problems for the processing of an inbound response since rigid rules cannot be applied. The points that can be noted about a response are that: All responses will contain headers. All responses will contain the responders email address. All responses will contain a subject. The textual content of the subject cannot be assumed since it can be freely edited and so may not resemble the content of the outbound. If a subject contains a Subject Token then it should correspond to the TID. - If the response contains the Mail Token then the MID, TID and SID will be available and consequently it will be clear on the approach that should be taken in processing the response i.e., the handling of a single product 'YES' versus a multi-product 'ADG'. AN E-MAIL LIFE CYCLE OUTBOUND a) Create an outbound message An outbound email message consists of texts block that contains information and one or many questions or choices. The text block of an outbound mail message is sometimes referred to as a Mail Template. b) Deploy the outbound message The message can be deployed to anyone for whom an e-mail address is available. The address information in a Mail List (e.g., database, listserve) is merged with the Mail Template and sent. In some cases, the X-Headers are also personalized to reflect the purpose of the outbound mail message. INBOUND a) Receive a Reply The content of a reply can have various forms The reply responds to the outbound message e.g., an order. - The reply requests to unsubscribe from future mailings. The reply contains an indication that the respondent does not wish to receive any further mailings e.g., UNSUB, UNSUBSCRIBE, UNJOIN and REMOVE. - The reply requests customer service and ad hoc questions. - The reply indicates a change in personal details or to be added to the mailing list. There is also the possibility that the outbound message did not reach its final destination and that it bounced back. There are two categories of bounces, hard bounces and soft bounces. A hard bounce notification indicates outright failure. For a hard bounce, the subject would contain a message of the following form: Returned mail: Host unknown (Name server: ssoofftteecchh.com: host not found) The sender of a hard bounce is usually specific such as: Mail Delivery System [MAILER-DAEMON] A hard bounce can also be detected in the response X-Header: Received: by mail.kersur.net (mbox peterk) (with Cubic Circle's cucipop (vl.31 1998/05/13) Fri Mar 19 21:04:39 1999) X-From_: MAILER-DAEMON Fri Mar 19 21:04:36 1999 Return-Path: <MAILER-DAEMON> Received: from localhost (localhost) by mail.kersur.net (8.9.1/8.9.1) with internal ιd VAA20320; Fri, 19 Mar 1999 21:04:36 -0500 (EST) Date: Fri, 19 Mar 1999 21:04:36 -0500 (EST) From: Mail Delivery Subsystem <MAILER-DAEMON> Message-Id: <199903210204.VAA20320@mail . kersur .net> To: <peterk@sytech.com> MIME-Version: 1.0 Content-Type: multipart/report; boundary= "VAA20320.921981876/mai1. kersur .net" Subject- Returned mail: Host unknown (Name server: ssoofftteecchh.com. host not found) Auto-Submitted- auto-generated (failure) The response body can also contain failure information: The original message was received at Fri, 19 Mar 1999 21:04:35 -0500 (EST) from dialuplll.kersur.net [207.180.95.76] The following addresses had permanent fatal errors <JohnSmιth@SSOOFFTTEECCHH . com> Transcript of session follows 550 <JohnSmιth@SSOOFFTTEECCHH.com> ... Host unknown (Name server: ssoofftteecchh.com: host not found) Softbounces can be of three types: 0 NonDeliveryNotification occurs when a given message has not been delivered yet but will continue to try and deliver for a further specified period of time. This state can be detected in the response subject: FW: Warning: could not send message for past 4 hours The response can also be detected in the response body: * * * * * * * * * * * * * * * * * * ** * ** * * * * * * * ** * * * * * * * * ** * *** * THIS IS A WARNING MESSAGE ONLY ** ** YOU DO NOT NEED TO RESEND YOUR MESSAGE ** ********************************************** The original message was received at Tue, 9 Mar 1999 08:00:18 -0500 (EST) from mail.e-dialog.com [207.31.244.2] The following addresses had transient non-fatal errors hgaethSandexc01. cmgI . com (expanded from: <HGaeth@engage.com>) Transcript of session follows hgaeth@andexc01.cmgi.com... Deferred: Connection refused by andexc01. cmgi . com. Warning: message still undelivered after 4 hours Will keep trying until message is 3 days old 0 AutoResponders are notifications which actually indicate delivery but are sent by mail agents to indicate that the user will not be able to respond immediately (possibly on vacation) but the sender should expect a response when they return. ° Unknown b) Process the reply Automatic processing of an e-mail response is defined as the ability to determine accurately the requirements of the reply by using text inspection and search rules. To automatically process an e-mail response, there are a number of criteria that need to be satisfied by the content of the reply. The main three criteria are: ci) Who is the Respondent cii) What outbound message is the response to ciii) What does the Respondent require The exception to the above are hard and soft bounces that are identified by other e-mail properties. Since all legitimate mail responses will contain the e-mail address of the Sender this can be regarded as a base information for all responses. This information fulfills criteria ci) but alone is not sufficient for a response to be processed automatically. Criteria cii) can be satisfied by the Subject Token, provided the respondent has not altered it. Note that the Style ID is implied if criteria cii) is satisfied. Another source of information is the Mail Token. For a reply that contains a Mail Token, both criteria ci) and cii) can be determined. But how is criteria ciii) satisfied? There is no simple solution to this question since the answer lies in the body of the reply, which is in 'free form'. The only method available that can determine the requirements of the respondent is to parse the email reply based on the SID. c) Produce Reports After determining the requirement of the inbound e-mail, database entries and reports can be produced. Bounces Design Specification for QuickReply QUICKREPLY The QuickReply application is used to process e-mail responses to mailing campaigns. The building and sending of the e-mail messages is not within the scope of QuickReply. The test within a campaign's flight provides the outbound e-mail message. The message will contain both generic and personalized information and will normally require a response from the person the message is sent to. Responses to a test are received in the Inbox folder of the mailbox. The design objective of QuickReply is to read the responses from the Inbox, and decide from its content the requirements of the response. On determining (or not determining) the requirement, the response is filed to pre-configured sub-folders and the appropriate tracking database is up-dated. QuickReply will generate diagnostic information that will support the reasoning on how it reached its decision. The main data storage area of QuickReply is Microsoft Access relational database. Appropriate records will be added to this database as the response processing is performed. In addition, it is likely there will be responses that cannot be automatically processed and, in such cases, Customer Service will use QuickReply in manual mode. Manual mode will also add records to the appropriate tables in the database. The information in the database will be used to generate reports. APPENDIX B MAILBOX ORGANIZATION Mailings are performed on behalf of a Client. Consequently, all e-mail transfers for a particular Client will be performed within the Clients mailbox. The organization of the Clients mailbox includes an Inbox for the responses and a pre-configured number of sub-folders where the responses are filed. Mailbox - <Client Reference e.g., HBSP) Campaign CID Flight FID AC YYMMDDhh AddChange YYMMDDhh BouncesHard YYMMDDhh BouncesSoft YYMMDDhh Master Order YYMMDDhh Unclear YYMMDDhh Unsubscribe YYMMDDhh Inbox YYMMDDhh In the above, YYMMDDhh is a directory named after the year, month, day and hour. This format reflects the date and time the entries were placed in that folder. Each test flight will have a number of responses associated with it. When QuickReply categorizes a response, it will be automatically moved from the Inbox to the appropriate sub- folder. AC Responses for customer service to process manually AddChange Responses that contain personal detail changes BouncesHard Hard bounces BouncesSoft Soft bounces Master Master version of the outbound mail Order Responses with an order Unclear Responses that are unclear as to how they should be processed Unsubscribe Response to unsubscribe E-MAIL STYLES The Style ID (SID) of a response indicates the approach that should be taken by QuickReply during processing. The SID is a two-digit numerical value XY where: - X=l indicates the outbound Personal block is included in the outbound message. Y=message layout style described below. The following two layout styles are supported: a) Single Product Offer - layout style=l This style offers one product. The respondent is asked to reply "YES" if they are interested. b) Multi-Product Offer - layout style=2 The mailing information is based on information in a relational database. This style offers a number of products the respondent can choose from. For example, the outbound message could contain: Your choices (detailed below) are: The work of Leadership Audio Leading Your People Audio Leading Change Successfully Audio Overcoming Resistance to Change Audio Gaining Competitive Advantage Audio The respondent makes a choice and responds by stating their requirement in the free format e.g., "please send me ABE". The number of items can vary as well as the choice symbol i.e., 1,2,3, could be used instead of A,B,C. PROCESSING INBOUND MAIL AND REPORTING The general processing and reporting function is described below. The general flow in processing responses is to determine the membership ID (MID), then the test ID (TID) and style ID (SID) and then perform an examination of the response to determine the requirement. The processing criteria can be summarized as follows: ci) who is the Respondent? cii) what is the response to? ciii) what does the Respondent require? All inbound responses are targeted to the Inbox of the Client's Mailbox. On a periodic basis, the responses in the Inbox will be processed. ci) Who is the respondent? - Determine the MID The are several ways in which the Membership Information can be determined. The importance of the MID is that could provide a handle to the Members personal information a) Extract the Response Address from the response. Determine if a unique record exists for the Address. If a unique address exists then the MID is determined. If the record is not unique then examine the mail token. b) If the Mail Token exists then the MID is determined. Use the MID to confirm that the respondents e-mail address is the same as that in the database. If the addresses are different then report that this was the case but continue to process. c) If the SID indicates that the Personal block was included in the outbound, the extract the Member details from the Mail Personal. The extraction assumes that the response information is in square brackets '[]'. The field definitions are defined in the database together with an indication of those that have to be completed by the responder. If Mail Personal is not complete (the fields are indicated in the database), move the response to Unclear and report. d) If the MID cannot be determined, move the response to Unclear and report. cii) What is the response to? - Determine the TID and SID The next stage in response processing is to determine what the response is to. This can be determined from the Test ID. a) If the Mail Token exists then extract the TID and SID. If the Mail token is absent, report but continue the determination of the TΓD. b) Determine the TID from the database based on the Mail Subject of the response. If the look-up is successful, then the SID will also be determined. c) At this stage the TID and SID should be known. If not, move the response to Unclear and report. ciii) What does the Respondent require? With the MID, TID and SID determined, the response message(s) are still of no value until it is established what the respondent requires. The obvious approach to this problem is to compare the response with the original and try to make some sense of the differences. a) If the Mail Subject did not contain the Subject Token, examine for words that appear in the word action table. Any bounced responses are moved to the Bounce sub-folders. Any unsubscribe requests are moved to the Unsub sub-folder. b) If the SID indicates a single item promotion, examine the Mail Subject for words that appear in the word action table. Any order responses are moved to the Orders sub-folders. c) Examine the response for words that appear in the word action table. Any bounced responses are moved to the Bounce sub- folders. Any unsubscribe requests are moved to the Unsub sub- folder. d) Remove all the text of the outbound message from the response. e) Normalize the response. Remove characters from the beginnin of each line. The list of characters to be removed are in the word replacement table with ModeID=LineStart. f) Replace phases from the normalized response. The phases that are replaced are given in the word replacement table with ModeID=PhaseReplace. g) If the SID indicates that there is only a single item on promotion, examine the normalized response for words that indicate an order of a single product item. The words are in the word action table with the ActionID=SingleOrder. If order information the StartOption and EndOption from the bindings table are used to verify that item(s) ordered are in the correct choice range. i) Any order requests are moved to the Orders sub-folder. j) If the purpose of the response cannot be determined, then move the response to the Unclear sub-folder. DATABASE ORGANIZATION QuickReply uses two types of databases that are stored in Microsoft Access. The first database is part of the QuickReply application and contains high-level information on the campaigns, flights and tests. The second database is specific to a particular Client Test. a) QuickReply Database The QuickReply database contains the information that binds campaigns, flights and tests. tblTestBindings contain Test bindings Test ID unique Client ID Client Test Database database name used for the test information Subject subject text of the outbound test Style ID the style of the outbound message StartOption character of the first item in the test EndOption character of the last item in the test Campaign ID Mailing ID Flight ID tblOutboundPersonal contains personal details that appear in a test Test ID unique Question prompt displayed in personal block e.g., First Name AnswerLen the maximum length of the answer AnswerReq? flag to indicate that an answer must be given tblWordActions contains words that convey an action Word unique Action ID action id for this word e.g., 'bounce' tblWordReplacement contains phrases and their replacement Phase unique Replacement replacement to the phrase Mode ID type of replacement b) Client Test Database tblMembers contains member details Member ID unique Email Prefix First Middle Last Suffix Title Company BillAddressl ShipAddressl BillAddress2 ShipAddress2 BillAddress3 ShipAddress3 BillCity ShipCity BillState ShipState BillZip ShipZip BillCountry ShipCountry Tel Ext Fax EDRMA Introduction This document is intended to provide a schematic synopsis of E-Dialog Response Management Architecture (EDRMA). Thereby it is hoped that the design of the Verbind E-Mail Channel Server (ECS) can best accommodate EDRMA's input requirements, and so EDRMA's output requirements may be adjusted to match those of Verbind LifeTime's architecture CO -p. (VLTA) "First, some acronyms..." - Anonymous X o w EDRMA Relevant Modules - Top [0.1] Where EDRMA Fits w/ECS OUTBOUND Mailing Instances Bold modules indicate ECS modules INBOUND EDRMA Mailbox Canonical Data Structures - Exchange Server Data Store [0.2] Mailbox - <ClientFullName> (not alias: "hbsp") <CampaignName>[<CID>] • ApprovedResponseTemplates <templatelD> • <FlightName>[<FID>] - AC (i.e., "Advocacy Care") + <date: YYMMDDhhmm> - ADDCHANGE + <date: YYMMDDhhmm> - HARDBOUNCES (i.e., hard undelivereds... "jsmith@foo.com is not a valid addressee") + <date: YYMMDDhhmm> - INBOX (monolithic, this Mailbox) - MASTER (contains master template, this FID) - ORDERS + <date: YYMMDDhhmm> » [[custlDIListlDIFIightlDITCID]] « footer tags (x-header, subject) - SOFTBOUNCES + DELIVERYNOTIFICATIONS » <date: YYMMDDhhmm> + AUTORESPONDERS » <date: YYMMDDhhmm> + UNKNOWN >» <date: YYMMDDhhmm> - UNCLEAR + <date: YYMMDDhhmm> - UNSUBS + <date: YYMMDDhhmm> EDRMA Selected Applications VBA.PKinboxlnspector interface: GUI / VBA data: MAPI inbox sorting, folder management application VBA.PKresponseProcessor interface: GUI / VBA data: MAPI response review and report preparation application PL.AEprocOrder() interface: commandline data: ADO 2.0 process raw "order e-mails" by TCID uses cf file rulesets for document preprocessing and data element parsing tied to CID; other rules, hardcoded generates: Acceptable output for review, annotated Exceptions, annotated Truncated BODYs, annotated Raw fields output , annotated Raw fields exceptions , annotated Rule-eval log (exhaustive) PL.AEprocBatPrepO interface: commandline data: ADO 2.0 takes selected output from PLAEprocOrderQ and transforms to a batch transfer specification via a field map and transform rules cf PL.AEprocUpdateBatVerbind() TBD PL.AEscrubNormalCanon() « not used on the response side » interface: commandline data: file handles scrubber, normalizer, canonicalizer also generates scrambled (non-predictable) row Ids and flags AOLs EDRMA Process Stages [0.5] Preliminary ECS hooks anticipated Preprocess Stage • inspect Inbox using VBA PKinboxlnspector - auto-creates folder structure (previous slide) - facilitates auto sort of items into ORDERS, UNSUBS, UNDELS HARDS, SOFTS, ADDCHANGE, etc - facilitates manu sort of items into AC, and exception • report preparation by TCID via AEprocOrderQ - produces OUT_report, EXC_report && EXC_BODY diagnostic report Processing Stage using VBA.PKresponseProcessor • for each EXC_ - inspect, correct, reconcile (via Mailing Table lookups) and commit • for each OUT_ - inspect and commit to report (or not) • Acceptable UNION of EXC_ && OUT_ -> Reporting, Update Stages { AEprocBatPrepQ II AEprocUpdateBatVerbindQ } • Hard exceptions are tagged as such and become Followup RFC's to get additional (critical information) • FUP (FUPID -> RFC) tags affect routing, tie-back to HARD exception row in this EXC_ report for closure Response Follow-up Confirmation Stage • for each non-BOUNCE (ORDERS, UNSUBS, etc ), respond to respondents with an appropriate "confirmation of receipt/action taken" message • using relevant response template store (templatelD) • this class of response likewise tagged for routing (FUPID -> confirm) Reporting Stage • produce order report - deliver via fax - post to client private web application - deliver as formatted batch Update Stage • deliver formatted batch to (Verbind, Database} -> sp_'?'?'?, SQL Executive H\_Dβvelopmentp ^\pBJ rf hbsp_ β traet0^it* Printed at 19:48 oh 06'Feb 1999 ^ O CM εoHi/oos /iDd sewo/io OΛV r:\_Developm β nt\PRJ\PRJ--hbsp „ βxtractQrdβr-W B^ιS^rpoOrdβr.pl Printed at 19:4β on 06 Feb 1999 n caliza -P^ w F^\_Dβvβ|oppent\PRJ\PR^_hbsp_extractOrder-7 0B lM!Q\pr cQrdβr.R| Printed at 19:46 on 06 Feb 999 open GactivityLo open GoutFile: \[ GreportFile: open excReportFil "MAIN: :cannot open excBODYRepor open GexceptionsFi } ■ ■ ; - ■ ^. CLIENT: JGclientName opDSN ( recs) BODYdefn: JGbodyD F.:V-Dev β lopment\PRJ\PRJ„hbsp_extractOrder-W©ήK)^e\procOrder.pl Page 6 Printed at Ϊ&48 on 06 Fe l^ 4^ I '] I'. line.'l') — Gpipe) ; push(θbo :\ peve!opment\PRJ\PRJ_hbsp_extractθrder-WORKING\procθrder.pl Page 7 Ijrited at 1§:48 on 06 Feb 1999 ' F:V ^ Development\PRJ\PRα^hbfDj^xtractOrder^W«i&Wfe\procGrder.p| Bagfrifl HJGSii at 1&:48 on 06 Feb* 1999^ ' , JeventType, • SBodyTo , Jthi SBodyBottom, \%LAYO JeventDesc = JeventDesc, JGuser, JLGDEBUG_FTN) J -J = 1; l ast JRULE = 2 ; l ast 5 5 2 2 6 5 } 528 ## A M AT CH WAS FOUND, THIS KEY ... push into results set 529 530 if( MATCH_DATA_ON) { 531 5 ^2 JcountFields++; , 533 JmatchEle ent =- S /[A\W\S\-\AΛ#\!\Θ]/$Gspace/g; 534 Jresults{Jkey} = &normalizeSpacing(JmatchElement) ; 536 ## print "--DEBUG— result = I Jresults{Jkey} | \n"; 538 ## build shipping and billing address blocks 539 540 CASE: { 541 542 if(Jkey =~ /u[a-z]_7) { 5 3 544 ## construct SHIPPING ADDRESSBLOCK for report 5 54466 if (Jkey — /[hi jklmq]\_/) { Jthi sShippi ngAddressBlock .= (l ength(Jresul ts{Jkey}) > 0)?(Jresults{Jkey} . JGpipe) : " ; 547 if (Jkey =~ /[efgnop]\_/) { Jthi sShippi ngAddressBlock .= (length(Jresults{Jkey}) > 0)?(Jresults{Jkey} . jGspace) : " ; } 548 549 last CASE; 550 } 552 i f(Jkey =~ /[Λ U ]_ ) { -p. 553 00 554 ## construct BILLING ADDRESSBLOCK for report 555 556 if (Jkey =~ /[hi jklmq]\_/) { JthisBillingAddressBlock .= (length(Jresults{Jkey}) > 0)?(Jresults{Jkey} . JGpipe) : " ; 557 i f (Jkey =~ /[efgnop]\_/) { Jthi sBi l lingAddressBlock .= (l ength(Jresul ts{Jkey}) > 0)?(Jresul ts{Jkey} . JGspace) : " ; } 558 559 last CASE ; 560 } 561 562 } 563 564 ## check for null critical fields: any absence here will throw exception, unless CUSTNO 565 566 ## print "--debug-- I JLAYOUT{ ' cr ti cal Fi elds ' } I \n" ; sl eep 1; 567 568 if (Jkey =- /[jLAYOUT{ ' cri ti cal Fields ' }]\_/ && Jresul ts{Jkey} I - /\S+?/ && Jthi scustNo < 1) { 569 570 JRECORD_VALID=0; JADDRESS_ADEQUATE = 0; 571 JeventRequiresFUP .= ((JeventRequiresFUP =~ /badAd/)?" : ' .badAd') ; jFUPcount++; JeventType = 'EX_FUP'; JexcpCouπt++; Jeven toesc = " \<".JthisRecordlD."\> CRITICAL STANDARD FIELD_VALUE IS NULL: \[JthisLayoutFieldName\]"; 8ιlogEvent(\*FH_log, JeventType, JeventDesc, JGuser, JL GDEBUG_FTN) ; 572 573 } 574 575 } 576 577 ## ALL MATCHES FAILED, THIS KEY 578 579 l'f(! JMATCH_DATA_0N) { 580 581 Jresults{Jkeyl = undef; 582 JeventType = EX_ERR'; JexcpCount++; JeventDesc = " \<". JthisRecordlD. "\> STANDARD FIELD_NAME=FIELD_VALUE PAIR UNPARSABLE: \[Jth isLayoutFieldName\]"; &logεvent(\*FH_log, JeventType, JeventDesc, JGuser, JLGDEBUG_FTN) ; 583 584 # check to see is unparsable field is a critical field 585 # critical fields -> from F file: any absence here will throw exception 586 ssp_extraςt§rdilrsJβϋqRKINQ\prρp^κl^.bl P β fltlP 58 if (Jkey — /[JLAYOUT{ 'cri ticalFields'}]W) { 588 SBQ JRECORD_VALID=0; JADDRESS.ΛDEQUATE = 0; . . . . . , , , _ , ξήn JeventRequiresFUP .= ((JeventRequiresFUP =- /badAd/)'" :' .badAd') ; jFUPcount++; JeventType = EX_FUP ; JexcpCount++; Jeven t D esc = " \ < ".Jthis R ecordi D ."\ > UNPARSABLE STANDARD FIELD_NAME=FIELD_VALUE PAIR is CRITICAL: \[Jthi sLayoutFi el dName\] ; &logEvent(\*FH_log , JeventType, JeventDesc, JGuser, JLGDEBUG_FTN) ; 591 } 592 } 593 594 } 595 596 #*######»*****########* 597 ###* END INNER LOOP ### 598 ####################### 599 600 ###################### 601 ### SUMMARY RULES ### 602 #****#####**###**##*** 604 ## throw EX_ LISTNO/CUSTNO error exception if address is not OK && Iphone, depending on CID_LID_REQUIRED from cf file 605 606 if( LAYOUT{'CID_LID_REQUIRED'}) { 607 608 if( LISTCID_EXCEPT_ON) { 609 610 jRECORD_VALIO = 0; 611 JeventRequiresFUP .» ((JeventRequiresFUP =- /chkCLlD/)?' ' : ' .chkCLlD') ; jFUPcount++: JeventType = ΕX_FUP'; JexcpCount++; JeventDes c = " \<". JthisRecordlD. "\> EITHER CID || LID ABSENT WHEN CF CRITICAL"; 41ogεvent(\*FH_log, JeventType, JeventDesc, JGuser, JLGDEBUG_FTN) ; 612 613 } 614 615 } 616 617 if(' JLAYOUT{'CID_LID_REQUIRED'}) { 618 619 i f(jLISTCID_EXCEPT_ON *& ! ( JADDRESS_ADEQUATE && Jresul ts{ ' r\_phone' } ι ~ /\S+?/)) { jRECORD_VALID = 0; } 620 621 } 622 623 ## throw EX_ MAILINGID exception if cf file says it's required 624 625 if(lLAYOUT{'MAILINGID_REQUIRED'}) { 626 627 if(jMAILINGID_EXCEPT_ON) { 628 629 RECORD_VALID = 0; 630 . JeventRequiresFUP .= ((JeventRequiresFUP =~ /chkMID/)?" : ' .chkMlD") ; jFUPcount++; JeventType = 'EX_FUP'; JexcpCount + +: Jevent D esc \< .JthisRecordlD. \> MAILING ID ABSENT WHEN CF CRITICAL"; SlogEvent(\*FH_log , JeventType, JeventDesc, JGuser, JLGDEBUG_FTN); 631 632 } 633 634 } 635 636 ## throw INFO if less than number required 637 638 if((JcouπtFields < JnumberRequiredFields) && JthiscustNo < 1) { 639 640 JeventType = "INFO"; JeventDesc = " \<". JthisRecordlD. "\> (OVERALL) NOT ALL STANDARD FIELDS FOUND: JcountFields (Jnumber R equired F ields)" ; &log£vent(\*FH_log, JeventType, JeventDesc, JGuser, JLGDEBUG_FTN) ; 641 } 642 643 ## tag duplicates for FUP 644 645 i f(JdupsMap{Jmai nCount} =~ /\#\#\#.+\#\#\#/) { JeventRequi resFUP .= ((JeventRequi resFUP =- /dupAd/)? " : ' .dupAd ') ; jFUPcount++; } 646 647 ## catch thisBodyTop and thiSBodyBottom blank yet address still extracted adequately (eg happens when cut & paste responses between the body delimiters) 648 649 if(JRECORD_VALID && JthisBodyTop !~ Λs+ 7 / 4& JthisBodyBottom !~ /\S+?/) { 650 -•652 Jevent T ype = 'EX_ERR'; JeventRequiresFUP .= '.chkBody' ; jFUPcount++; JexcpCount++; JeventDesc = " \<". JthisRecordlD. "S> CUSTOMER RESPONSE ( Top, B ottom) NOT F O UND WHEN EXPECTED"; &logEvent(\*FH_log , JeventType, JeventDesc, JGuser, JLGDEBUG_FTN) ; 653 654 } 655 656 #################################*############################*# 657 #### RECORD INVALID: Attempt recovery from mailing database #### 658 #####################################################*########## 6 66 59 0 JRECORD_RECOVEREO = 0; 661 _ r 662 if(ljRECORD_VALID Mi ! jADD_CHANGE_ON) { 66 Jevent T ype = 'INFO'; JeventDesc = " \<".JthisRecordlD. "\> >» BAD RECORD: ATTEMPTING RECOVERY-LOOKUP USING \"JthisFromAddress\" , JLAY0UT{ ' thi sMa iling D S N '} -> jLAYOUT{'thisMailingTable'}"; SlogEvent(\*FH_log, JeventType, JeventDesc, JGuser, JLGDEBUG_FTN) ; 665 666 SέrecoveredResults = undef; 667 XrecoveredResults = &querySELECT_DB(\%LAYOUT, 'EMAIL' , JthisFromAddress, JLGDEBUG_FTN); 668 669 ## foreach(keys(%recoveredResults)) { print "=debug== key = J value = JrecoveredResults{J_} \n" ; } 670 671 CASE: { 672 673 i (JrecoveredResults{'_exιt_'} < 1) { 674 675 JREC0RD_VALID = 0; 676 JeventType = 'EX_ERR'; JeventRequiresFUP .= ((JeventRequiresFUP =~ /badMDB/)?' ':' . badMDB') ; jFUPcount++; JexcpCount++; JeventDesc = " \<". JthisRecordlD. "\> MAILING TABLE RECOVERY-LOOKUP FAILED ON \"JthisFromAddress\""; &logεvent(\*FH_log, JeventType, JeventDesc, JGuser, JLGDEBUG_F ι ι TN) ; 677 678 last CASE; 679 } 680 681 if (JrecoveredResults{ '_exit_' } == 1) { 682 683 jRECORD_RECOVERED = 1; 684 RECORD_VALID = 1; 685 JeventType = 'WRN_FUP'; JeventRequiresFUP .= ((JeventRequiresFUP =- /goodMDB/)?' ':' .goodMOB") ; jFUPcount++; JexcpCount+ + ; JeventDe sc = " \<".JthisRecordlD. "\> <« MAILING TABLE RECOVERY-LOOKUP SUCCESSFUL USING Y'JthisFromAddressY'"; 41ogEvent(\*FH_log, JeventType, JeventDesc. Guse r, JLGDEBUG_FTN) ; 686 687 ## construct JthisMDBbill ngAddress 688 689 foreach Jkey(sort(keys( MDBLAYOUT))) { 690 691 lvalue = jMDBLAYOUT{Jkey} ; 692 693 ## print "**DEBUG key = Jkey value = Jvalue \n"; 694 695 if (Jkey =~ /[hi jklmq]\_/) { Jthi sMDBbi l li πgAddressBlock .= (length(JrecoveredResul ts{Jvalue}) > 0)?(JrecoveredResultsf Jva lue} . JGpipe) : " ; } 696 if (Jkey =~ /[efgnop]\_/) { Jthi sMDBbi lli ngAddressBlock .= (l ength(JrecoveredResults{Jval ue}) > 0)'(JrecoveredResul ts{Jval ue} . JGspace) : " ; } 697 698 699 700 ## restore mai l inglD and CID, if blank 701 702 ## print "**DEBUG mailinglD - JrecoveredResults{'ED_MAILINGlD'} custNo = JrecoveredResults{'CID'} current custno = I JthiscustNo|\n"; 703 704 if(JthisMailingiD !~ /\S+?/ M JthisMailinglD == -1) { JthisMailinglD = JrecoveredResults{'ED_MAlLlNGlD'} ; } 705 if(JthiscustNo ι~ /\s+?/ || JthiscustNo == -1) { JthiscustNo = JrecoveredResultst 'CID'} ; } 706 707 last CASE; 708 } 709 710 } 711 712 } 714 #### add an empty flag where SHIPPING ADDRESS IS returned blank 715 716 iif(Jthi sshi ppingAddressBlock ι~ /\S+?/) { Jthi sShi ppingAddressBlock » ' { SAME } ' ; } 717 iif(Jthi sMDBbi ll ingAddressBlock !~ /\S+?/) { Jthi sMDBbi l li ngAddressBlock = ' { N/A } ' ; } 718 . .. 719 #### tag address block exceptions with diagnostic ques 720 721 i f( ' jRECORD_VALID) { 722 723 CASE: { 724 725 i f(Jthi sBi l l ingAddressBlock !~ ΛS+?/ && (Jthi sBodyTop =~ /\S+?/ | | Jthi sBodyBottom — /\S+?/)) { Jthi sBi lli ngAddressBlock = ' =NO_ VALID_ J ADD/INSPECT=' : last CASE; } . . . „ , „ , , L . . ,, . -, . 726 if(JthisBillingAddressBlock !~ /\S+?/ && JthisBodyTop !~ /\S+?/ && JthisBodyBottom !~ /\S+?/) { JthisBillingAddressBlock = { BO DY_EMPTY/INSPECT }'; last CASE; } , . .. .,,. . . , ■, . . 727 if(JthisBillingAddressBlock =~ ΛS + ?/ && ! JADDRESS ^ ADEQUATE) { JthisBillingAddressBlock = CRIT _FLD_NUL/INSPECT ->| ' .JthisBillingAddressBlock. ' I' ; last CASE; } 728 729 Jthi sBi lli ngAddressBlock = '=UNKNOWN_ERR/INSPECT=| ' . Jthi sBi l lingAddressBlock ; last CASE; 730 731 } 732 733 JeventRequiresFUP = (JeventRequ resFUP !~ /\S+?/) ? '.inspect' : JeventRequiresFUP; 734 } 735 36 ######################################### 737 ## write valid record data to outfiles ## 738 ######################################### 739 740 JED_ORDER_VALUE = 1; 741 JEXCEPTI0N_TYPE = "OK"; 742 JUPDATE_SUCCESSFUL = 0; 743 JTHIS_KEY_FIELD = undef; 744 JTHIS_KEY_FIELD_VALUE = undef; 745 746 if(JREC0RD_VALID) { 747 748 unless(jADD_CHANGE_ON) { 749 750 CASE: { 751 752 „ „ , , if ( &queryUPDATE_DB(\%LAYOUT,JTHIS_KEY_FIELD_VALUE = Jthi SFromAddreSS , JTHIS_KEY_FIELD = "EMAIL", "ED ORDER". JE D ORDER V ALUE "ED_MAILACTION",-l,jRECORD_RECOVERED,jLGDEBUG_FTN)) { J UPDATE _ SU C CESSFUL =1; last CASE ; j; - u - uix cx ,»cu_uκu t κ_ VAl _u t , 753 LACTION„",-l,,j-RECORD_RECOVERED, ,jLGiDfE ( &BqUGu_eFrTyUNP)D)ATE_DB ( \%{LAJY U O P U D T AT , E _TH SU ICS_ C K E E S Y S _ FU FI L =EL1D;_VlAaLsUtE CA = SE Jt;hi } S;CUStNO, JTHIS_KEY_FIELD = "CID", "ED ORDER",, J J E t D.O u R κu D ι E : R iv, V V A A L L U Ut E , " E t D u__ M M A A I J . 754 „ , . if ( 4queryUPDATE_DB ( \%LAY0UT,JTHIS_KEY_FIELD_VALUE = JthisListID, JTHIS_KEY_FIELD = "ED_LID","ED ORDER", JED OR D E R VALUE " ED MAILACTION",-l,jRECORD_RECOVERED,jLGDEBUG_FTN)) { J UPDATE _ SU CC E SS FUL =1; last CASE ; }; , J - > _uκu t κ_ VALUt , t u_ 756 } 757 758 } 759 760 if(! JUPDATE_SUCCESSFUL) { 761 762 JREC0RD_VALID = 0; 763 „ . „ , .. Jevent T ype = 'EX_ERR'; JeventRequiresFUP .= ((JeventRequiresFUP =~ /badupMDB/)?" : ' .badUpMDB") ; jFUPcount ++ ; JexcpCount ++ - Jevent M eS ^ = X< ■Jth ' 'S?ecordID. \> (MANUAL UPDATE REQUIRED) MAILING TABLE UPDATE FAILED ON ALL KEYS - LAST TRY: Y'JTHIS KEY FIE LD - > J TH IS K E Y FIELD VA LUEV ; &logEvent(\*FH_log, JeventType, JeventDesc, JGuser, JLGDEBUG FTN); ~ ~ . ΠL . Ϊ ^^ 764 765 } 766 767 } 768 769 if(I jRECORD_VALUE && ! JUPDATE_SUCCESSFUL) { 770 771 JeventType = Εx_ERR'; JeventRequiresFUP .- ((JeventRequiresFUP =~ /noupMOB/)?" : ' .noupMDB') ; jFUPcount++; Jexcpcount ++ ; Jevent D esc = " \ < -JthisRecordlD. \> INVALID RECORD: MAILING TABLE NOT UPDATED"; 41ogEvent(\*FH_log, JeventType, JeventDesc, J G user, JLGDEBUG_FT N ) ; FΛ DevelopmenftPRJVPRJ.hbsp^traόtOrder-WORKlHG^JrjpcφWdr.pJ Page 13 Printed at 19:48 δn 06 Feb 1999 = 2; } } jLGDEBUG_FTN)),\%GoutFil eRecord, 'EXTENDED', , JLGDEBUG_FTN)) ,\%GreportFil eRecord, "NO 1eName, JLGDEBUG_FTN) **\n\n"- F\_Deγ6|o,mpnt\PRJ\PR ^ hbip|^ actOrder-W0R^yG^r^|Qrde.r.ρl Page 15 Prriinnttόerdi a att I 19:d4Sg ή onn f 0lfi6 F Feebb 11999999 F Develotoment\PRJ\pR^hfesp_extra(?tOrder~WORK] (?^prpc|iQrder.pl Page 16 Printe ώ UM on 06 Feb A ' 963 * 964 * 965 * 966 967 sub checkDupsReturnMap { 968 969 my(JptrAOHDB, JGDEBUG) = @_; 970 my(@DB) = ΘJptrAOHDB; 971 972 ## prepare map of duplicates on FromAddress 9 9 7 74 3 my %dupsMap = undef; 975 my Jj = undef; 976 977 for Jj (0 .. J#DB) { 978 979 JdupsMap{Jj} = JDB[JJ]{' FromAddress'} 980 981 } 982 983 my ΘmirrorDupsMap = undef; 984 @m rrorDupsMap = values(%dupsMap) ; 985 my Jkey = undef; 986 my Jval ue = undef; 987 my @arr = undef; 988 my Jnu ber = undef; 989 990 foreach Jkey(keys %dupsMap) { 991 992 Jvalue = JdupsMap{Jkey}; 993 next if(Jvalue !~ /\S+?/); 994 995 Oarr = undef; 996 βarr = grep /Jvalue/, Θm 997 Jnumber = scalar(βarr) ; 998 999 if(Jnumber > 1) { 1000 1001 . Jevent T ype = 'INFO'; JeventDesc = "DUPLICATE FromAddress ITEM DETECTED ON IMPORT 4 FLAGGED: (JnumbeH Jkey I value)"- 41oα E ventf\* FH lo g, JeventType, JeventDesc, JGuser, JLGDEBUG_FTN) ; a " - 1002 JdupsMap{Jkey} = ('###' .Jnumber. '*** • .JdupsMap{Jkey}); 1003 1004 ## print JdupsMap{Jkey} . "\π" ; 1005 1006 } 1007 #* print "** key=".Jkey." *** value=". JdupsMap{Jkey}." occurrences=". Jnumber. "\n" ; 1008 } 1009 1010 return ^dupsMap 1011 } 1012 1013 # 1014 # 1015 * 1016 1017 sub checkMul ti Buy_Extract { 1018 1019 my(Jthi sLi ne, Jthi sMai l i nglD, Jpos , JptrLAYOUT, JGDEBUG) = @_; 1020 my(Jexit) = 0; 1021 1022 myøϋLAYOUT) = %JptrLAYOUT; 1023 my(βrangestack) = undef; 1024 my(@singlestack) = undef; 1025 my(JcountRangeMatches) = 0; 1026 my(Jrepeat) = 1; 1027 my(J atch) = undef; 1028 my(jreplacementEscchar) = '%' 1029 my(JpreProcRemoveChar) = 'Λ' 1030 my(Jelementseparator) = ' ' R:' Deyel pment\PRJ\PR4 „ hl ) SP_extractOrder- ORKI G\procOrder.pl Page 18 Printed at!l 48 on 06 Feb 1999 1100 iioi } 1103 #if(jRULE > 044 ord(Jarr[0]) <= JmaxASCII) { 1105 # print "-- debug -- REJECT - range case |Jmatch| out of alpha order with current stack!\n"; 1 06 # if(ord(Jmatch)>JmaxASCII) {JmaxASCII = ord(Jmatch); } 1107 # JPUSH = 0; 1108 1109 #} 111 if(defined(Jmatch) 44 Jmatch !~ /[jLAYOUT{JthisCheckedMailinglD}]/) { }l!3 n* print "—debug— REJECT - not in RANGE = I jLAYOUT{JthisCheckedMailinglD}| match |Jmatch| in line | JthispreExtractionLinel \n" ; 1114 if(ord(Jmatch)> maxASCII) {JmaxASCII = ord(J atch); } 1115 JPUSH = 0; 1116 1117 } 1118 1119 if(JPUSH 44 JRULE > 044 Jmatch =- /\S+?/) { 1120 1121 *# push(@rangestack, ('<' .JRULE. '> |". Jmatch)); Jexit = 1; 1122 Jmatch =~ s/\-/ thru /g; 1123 push(@rangestack, Jmatch); 1124 Jexit=l; 1125 } 1126 1127 if(JPUSH 44 JRULE < 044 Jmatch =~ /\S+?/) { 1128 I 1129 push(ΘtestSinglestack, Jmatch) ; -~4 1130 1131 unless(ord(Jmatch) <= JmaxASCII) { 1132 1133 ## push(@singlestack, ('<' . JRULE. '> |'. Jmatch)); 1134 push(@singlestack, Jmatch); 1135 Jexit=l; 1136 1137 } 1138 if(ord(Jmatch)>JmaxASCll) {JmaxASCII = ord(Jmatch); } 1139 } 1140 1141 f(JGDEBUG) { if (Idefined(Jmatch)) {print "--debug-- match not defined! in line= | JthisPreExtractionLinel\n"; 1} 1142 } 1143 1144 *# consolidate extractions, pre report 1145 1146 foreach(SrangeStack) { unless(J_ !~ Λs+?/) { push(@thisltemsselected, J_) ; }} 1147 foreach(ΘsingleStack) { unless(j_ !~ /\S+?/) { push(@thisltemsselected, J ); }} 1148 1149 ** SPECIAL POST EXTRACTION CASE RULES 1150 1151 my JFIND_BUY_ALL = 0; 1152 1153 foreach( @ GBuyAll Indicators) { s/[\n\r]//g; next if(J_ !~ /\s+?/) ; if(JthisPreExtractionLine =- /J_/) { JFIND_BUY_ALL = 1; } } 1154 1155 if (JFIND_BUY_>LL) { 1156 1157 if(Jexit) { 1158 1159 my Jt = ' .vfyTok' ; 1160 JeventType = 'WRN_FUP'; (JeventRequiresFUP !~ /Jt/) ? JeventRequiresFUP .= Jt : JeventRequiresFUP ; jFUPcount + +; Jexcp C ount ++ ; Je ventDesc = " \< .JthisRecordlD. '\> checkMultiBuy_Extract :: AMBIGUOUS ALL-ITEM SELECTION DETECTED IN EXTRACTION LOCATION < Jpos > "; 41ogEveπt(\* FH _loq, Je ventType, JeventDesc, JGuser, JLGDEBUG_FTN); 1161 1162 } 1163 1164 push(@thisltemsselected," ALL (JthisMailinglD) "); Jexit=l; 1165 } 1166 LβxtractOrd Page 20 JthiSBodyBotto , JptrHASHLAYOUT, JptrSCALARtopLines , JptrSCALARbottomLines, JGDEBUG) S£ ^ Position. .JthisSubject. ' I '); ' ,\%LAYOUT, JGDEBUG)) { uyTokenPositon. ">' ; ■ F< Deve|opment\pR4ΛERJ^hbsp_extractQrdir^WQRKIHGprdi|:C?rd r J Page 21 P'rliite at '19:48 ori 06'FeB 1999 σ-x o p { \ L .Development\PRJ\PRJ_hbsp_extractprder-W0RKINj3\prQcQrder.pl Page 23 Printed at 19:48 briDβ Feb 1999 1432 my JleadingDigit = Jl; -K33 if (length(JleadιngDigit) == 1) { JleadingDig t ('0' .JleadingDigit); } 1434 Jval .= JleadingDigit. J2.J3.J4. '-' .Jday; 1435 } 1436 1437 if (JLGDEBUG_FTN) { print "DEBUG gdate=" . Jval . "\n" ; } 1438 1439 return Jval ; 1440 1441 } 1442 1443 * 1444 # 1445 * 1446 1447 sub getFieldKeys { 1448 1449 my(JptrLayout) = Θ_; 1450 my(%LAYOUT) = ^JptrLayout; 1451 1452 ** prepare and count required fields from body data layout for check against body 1453 1454 y(Θfieldκeys) = undef; 1455 my(Jk) = undef; 1456 1457 ##Jf = scalar(Θfieldκeys) ; print "--debug-- scalarstartFtn=Jf \n"; 1458 1459 foreach Jk(sort keys %LAYOUT) { 1460 σx. 1461 next if(Jk !~ / Λ [a-z]{l,2}_/) ; ## these elements are not fieldnames but are other CF parameters (name \t value) 1462 1463 ** print "--debug-- k= |Jk|\n"; 1464 1465 if(Jk =~ /\s+?/) { push(ΘfieldKeys,Jk); } 1466 •1467 1468 shift ΘfieldKeys; 1469 ## Jf = scalar(Θfieldκeys); print "--debug-- scalarEndFtn=Jf \n"; 1470 1471 return ΘfieldKeys; 1472 } 1473 1474 # 1475 1476 sub getκeyPos_θutfile { 1477 1478 y(JptrHASHrecordTemplate) = Θ_; 1479 1480 my(%HASHrecordτemplate) = %JptrHASHrecordTemplate; 1481 1482 my Θrecord = undef; 1483 JsalutationFieldPos = -1 1484 JlDFieldPos = -1 1485 jLIDFieldPos = -1 1486 jMailinglDFieldPos = -1 1487 Jfi rstNameFieldPos = -1 1488 JlastNameFieldPos = -1 1489 JlXFieldPos = -1 1490 JtitleFieldPos = -1 1491 JstateFieldPos = -1 1492 JcountryFieldPos = -1 1493 JpostalCodeFieldPos = -1 1494 JemailFieldPos = -1 1495 JcompanyFieldPos = -1 1496 JaddressFieldPos = -1 1497 JdepartmentFieldPos = -1 1498 JcityFieldPos = -1 1499 Jf romAddressFieldPos = -1 1500 F:V ^ Development\PRJ\PRJ_hbsp_extractQrder-WθRKirιJ \R):ocOrder.pl Page 24 Printed at ϊ Wori 06 * Feb 19 ' was not \n :Cannot open: \[JkeyFileName \]"; en V-Develobrrient\PRJ\PRJ-.hbsD_extractOrder-- OB!i£!fjG\procOrder.pl Page 25 Printed ati9:4i on 06 Feb 1999" σx -. p -, j ιV rDe,v..eιl«oλpιm«ennit\DPDR.Jn\RPRR.Jι_ hhhbcsnpi eexxttrraatc:ttpijJrrcdιeerr~--wORhtκ^.i|Nl! ! r i-\\DprrooccuOrardeerr..Dpil Page 26 Prlnt a'at'19 48 on 06 Feb 19& Ox χ> JthisQueryKeyN' ON ON lD . "\ > (JLAYO ) ; s Q uery\] " ; 41og create RS: JthisQuervM"- f-,\.pevelopment\PRJ\RB ! J t>bsp_extractOrder-§ifglϊϊKI^GVprocQr<|βr.p! Page 29 Printed * at 19:48 on 06 FeBl9S»§ σx. o R\-.pevelop ent\PRJ\PRJ -< hbsp_extr&cWrder- OI IN!G\procOrder.pl Page 30 Printed at 19:48 on 06 Feb 1999 ' • 1902 1903 Jtabs = s/\t//g; 1904 1905 return Jtabless 1906 1907 } 1908 1909 * 1910 * 1911 * 1912 1913 sub sυbjectSynonymnLookup { 1991 4 5 my(Jsubject, JptrHASHLAYOUT.) = „Θ_; 1916 my(%LAY0UT) = XJptrHASHLAYOUT; 1917 my(JthisMailinglD) = -1; 1918 1919 Jsubject =- As*([\=V\+\-]{l,3})\s*/; 1920 JthiSSubjectMailinglDToken = Jl; 1921 1922 if(defined(JLAYOUT{JthissubjectMailingIDToken})) { JthisMailinglD = jLAYOUT{JthissubjectMailingIDToken}; } 1923 1924 ** print "-- debug -- ATTEMPT MAILING ID RECOVERY... TOKEN= IJthisSubjectMailinglDTokenl ... RESULT MAILINGID= I Jthi sMaili nglD|\n"; 1925 1926 return JthisMailinglD 1927 } 1928 1929 * 1930 * 1931 * 1932 1933 sub wr teRecord { 1934 1935 * takes FH by ref; has _e_ feature for values .1936 1937 my( FH, JGf ieldDelimiter, JlogKey, JptrHASHrecord, JRECORD_TYPE, JLGDEBUG FTN) = β • 1938 _ 1939 flock( FH, JLOCK_EX); 1940 1941 my JfileEmpty = 0; 1942 if(-z JFH) {JfileEmpty = 1;} 1943 1944 %HASHrecord = %JptrHASHrecord; 1945 1946 Jspace = " "; 1947 Jexit = 1; 1948 1949 JL0CK_SH = 1; 1950 JLOCK_EX = 2; 1951 JL0CK_NB = 4; 1952 JLOCK_UN - 8; 1953 1954 my Jrecord = undef; 1955 my Jheader = undef; 1956 my Jkey = undef; 1957 1958 foreach Jkey(sort(keys(%HASHrecord))) { 1959 1960 Jvalue = jHASHrecord{Jkey} ; 1961 1963 if(Jfileεmpty) { Jkey =~ s/[a-z]{l,2}_//; Jheader .= (uc(Jkey) . JGfieldoelimiter); } 1964 if(Jvalue =~ /Λ_e_(. {2,}) J/) { Jvalue « eval(Jl); } 1966 1967 Jrecord .= (Jvalue. jGfi el dDel imi ter) ; 1968 1969 } 1970 chop( Jrecord); # remove last field delimiter ;eJfιιac 0rdel-^ i 5Jjy| ^røc Q r øKpl Page 31 1971 1972 if(JfileEmpty) { chop(Jheader); print JFH Jheader. "\n"; } 1973 if(jADD_CHANGE_ON 44 jRECORD_τγpE ne 'BODY') { Jrecord = 4canoni calize(Jrecord) ; } 1974 print JFH Jrecord. "\n"; 1975 1976 flock( FH, JLOCK_UN); 1977 } 1978 1979 END 1980

Claims: Claims 1. A machine-based method comprising analyzing an e-mail message to derive response information concerning a commercial transaction, and based on the derived information, and automatically generating commercial transaction data in a format that is usable to automatically complete the commercial transaction. 2. The method of claim 1 in which the commercial transaction comprises an order for a product or service. 3. The method of claim 1 in which the e-mail message comprises at least part of an e-mail .sent to a customer and responses of the customer to the e-mail. 4. The method of claim 1 in which the automatic completion of the commercial ransaction comprises order fulfillment. 5. A machine-based method comprising sending an e-mail message to a customer offering a product or service for sale, the e-mail message comprising locations for response by the customer indicating his intention to order the product or service, receiving from the customer an e-mail message that includes the response, based on the received e-mail, automatically generating order information in a format usable automatically by an order fulfillment system to cause the order to be filled. 6. A machine-based method comprising analyzing an e-mail message to derive response information concerning a commercial transaction, automatically identifying response information which requires resolution of an issue with the source of the e- mail message, and automatically managing an e-mail dialog with the source to resolve the issue. 7. The method of claim 6 in which at least some of the e-mail dialog is performed automatically. 8. Software guided interactive e-mail dialogs to resolve, on behalf of a vendor, customer issues that occur in direct response e-mails that are automatically identified as requiring a dialog. 9. A machine-based method comprising automatically sorting e-mail messages, based on response information contained in the messages, into e-mail messages that can be processed automatically to generate commercial transactions, e-mail messages in which the response information is inadequate to permit generation of commercial transactions, and e-mail messages that may be subjected to exception handling to yield information that is sufficient to generate commercial transactions. 10. A machine-based method comprising analyzing an e-mail message to derive response information concerning a commercial transaction, and automatically generating a confirmatory e-mail message to the source of the e-mail message confirming that the commercial transaction has been or will be completed. 11. A machine-based method comprising receiving inbound e-mail messages that result from corresponding outbound e-mail messages associated with a marketing program, the inbound messages containing response information, each of the outbound messages being associated with a distinct piece of the marketing program, and automatically associating the response information in each of the inbound messages with the corresponding distinct piece of the marketing program. 12. The method of claim li in which the piece comprises a marketing campaign or a marketing flight. 13. The method of claim 11 in which the inbound messages contain information that links them to the corresponding outbound messages, and the associating step uses the link information. 14. The method of claim 13 further comprising automatically parsing the inbound messages for order information. 15. A machine-based method comprising sending outbound e-mail messages associated with commercial transactions, storing information related to each of the outbound messages in a database, the information being useful for completing the commercial transactions, the information not being contained in the outbound messages, analyzing inbound e-mail messages that result from the outbound messages and that contain response information useful in completing the commercial transactions, and automatically merging the response information with corresponding information in the database for use in completing the transactions. 16. A machine-based method comprising sending outbound e-mail messages associated with commercial transactions, storing information related to each of the outbound messages in a database, the information being useful for completing the commercial transactions, the information not being contained in the outbound messages, analyzing inbound e-mail messages that result from the outbound messages and that contain response information useful in completing the commercial transactions, identifying inbound e-mail 'messages that cannot be processed automatically to generate the commercial transactions, and using the database information to assist in exception handling of the identified inbound messages.

Inventors: ESTES ANTHONY D, ESTES, ANTHONY, D.
Applicants: DIALOG INC E, ESTES ANTHONY D, E-DIALOG, INC., ESTES, ANTHONY, D.
Application year: 2000
Main classification: G06F17
IPC codes: G06Q10, G06Q30